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