ghci> :t (>>=)
(>>=) :: Monad m => m a -> (a -> m b) -> m b
Почему второй аргумент (a -> m b)
вместо (m a -> m b)
или даже (a -> b)
? Что это концептуально о Монадах, которые требуют этой подписи? Имело бы смысл иметь классы типов с альтернативными сигнатурами t a -> (t a -> t b) -> t b
resp. t a -> (a -> b) -> t b
?