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