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