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つの法則は同じポイントを反復します。つまり、 return は bind 演算子の両側で恒等的な振る舞いを持つべきです。
モナドであることを認識せずに、前の例ですでに多くのモナドを使用しています。 List Monadを使用して特定のリストを生成する次の例を考えてみましょう。
main = do
print([1..10] >>= (\x -> if odd x then [x*2] else []))
このコードは、次の出力を生成します-
[2,6,10,14,18]