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