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