私は現在、Haskell の新しい要素であるモナドに苦労しています。したがって、型が と等しくない場合にのみ (実際の整数値を引数として受け取る) 型(>>=)
に対して関数を実行し、それ以外の場合は を返す演算子を作成する例によって、これを紹介しました。Maybe
Nothing
Nothing
(>>=) :: Maybe a -> (a -> Maybe b) -> Maybe b
Nothing >>= _ = Nothing
(Just x) >>= f = f x
ただし、これが次の使用法でどのように機能するかはよくわかりません。
eval (Val n) = Just n
eval (Div x y) = eval x >>= (\n ->
eval y >>= (\m ->
safediv n m))
(>>=)
演算子は単純に 1 つのMaybe
値とそれを返す関数を受け取るように思えますが、この例の使用コードでは、値を 2 回、関数を 1 回取っているように見えますMaybe
。x
ただし、 を評価し、結果を に入れn
、次に を評価しy
、結果を に入れ、両方で関数をy
実行すると言われました。ここでオペレーターがどのようにその役割を果たすsafediv
かはわかりませんが。(>>=)
これはどのように作動しますか?