Очень популярная монада объяснение здесь:Какова функция связывания Haskell?
http://blog.sigfpe.com/2007/04/trivial-monad.html
Я получаю все, кроме части:
bind :: (a -> W b) -> (W a -> W b)
bind f (W x) = f x
У меня есть базовые знания о Haskell (не использовал его в течение длительного времени), но эта подпись не казалась правильной.
Я установил GHC и проверил, что он думает, - оказалось, что думает, что я делаю, т.е .:
:t bind
bind :: (t1 -> t) -> W t1 -> t
Что мне не хватает?
вы ввели определение без подписи типа. Если вы включите подпись, вы получите правильный тип: используя 'Maybe' для' W', я попробовал 'GHCi>: t let {bind :: (a -> Maybe b) -> (Возможно, a -> Возможно b) ; bind f (Just x) = f x} в bind' и вернулся ':: (a -> Maybe b) -> Может быть a -> Возможно, b'. Эта функция, 'bind', является связыванием Haskell' >> = ', flipped:' flip (>> =) :: (Monad m) => (a -> m b) -> m a -> m b'. –