Self は associatedtype 含めて同一になっちゃうから強すぎて、Self から associatedtype を剥がしたものを記述できる構文が必要なはず。SelfProtocol みたいなものが必要。 protocol Functor { associatedtype Value func map<R: SelfProtocol>(_ transform: (Value) -> R.Value) -> R }Optional は Protocol じゃないもんな。