Haskell-monads

提供:Dev Guides
移動先:案内検索

ハスケル-モナド

*Monads* は、いくつかの追加機能を備えたApplicative Functorの一種です。 これは、*モナド規則*と呼ばれる3つの基本的な規則を管理するTypeクラスです。

3つのルールはすべて、次のようなモナド宣言に厳密に適用されます-

class Monad m where
   return :: a -> m a
   (>>=) :: m a -> (a -> m b) -> m b
   (>>) :: m a -> m b -> m b
   x >> y = x >>= \_ -> y
   fail :: String -> m a
   fail msg = error msg

モナド宣言に適用される3つの基本的な法則は次のとおりです-

  • 左アイデンティティ法- return 関数は値を変更せず、Monadの何も変更しないでください。 「return> ⇒ mf = mf」と表現できます。
  • Right Identity Law - return 関数は値を変更せず、Monadの何も変更すべきではありません。 「mf> ⇒ return = mf」と表現できます。
  • 関連性-この法律によれば、ファンクターとモナドのインスタンスは同じように動作するはずです。 「(f> =⇒ g)> ⇒ h = f> ⇒(g> = h)」と数学的に表現できます。

最初の2つの法則は同じポイントを反復します。つまり、 returnbind 演算子の両側で恒等的な振る舞いを持つべきです。

モナドであることを認識せずに、前の例ですでに多くのモナドを使用しています。 List Monadを使用して特定のリストを生成する次の例を考えてみましょう。

main = do
   print([1..10] >>= (\x -> if odd x then [x*2] else []))

このコードは、次の出力を生成します-

[2,6,10,14,18]