Monad 的定义
class Monad m where
return::a -> m a
(>>=) :: m a -> (a -> m b) -> m b
处理 monad 最重要的功能是绑定运算符 >>=
:
(>>=) :: m a -> (a -> m b) -> m b
- 将
m a
视为 “具有a
结果的动作” 。 - 将
a -> m b
视为 “具有b
结果的动作(取决于a
参数)” 。
>>=
通过将第一个动作的结果传递给第二个动作来将两个动作排在一起。
Monad
定义的另一个函数是:
return::a -> m a
它的名字很不幸:这个 return
与命令式编程语言中的 return
关键字无关。
return x
是一个微不足道的行动,产生了 x
作为结果。 (在以下意义上这是微不足道的 :)
return x >>= f ≡ f x -- `left identity` monad law
x >>= return ≡ x -- `right identity` monad law