class Eq a where (==) :: a -> a -> Bool class Monad m where (>>=) :: m a -> (a -> m b) -> m b (edited)protocol Equatable { static func ==(lhs: Self, rhs: Self) -> Bool } protocol Monad { ??? // どんな記法が馴染む? }a や m に読み替えているから自然に書けるけど、 Swift ではそれを Self で表しているのでジェネリックにしたときにどう書いていいのか。 Self が Haskell の Monad の m じゃなくて m a を表してしまっているので m b をうまく書けない・・・。