9

(m >>= f) >>= g = m >>= (\x -> f x >>= g)

fととの違いは何\x->f xですか??

同じタイプだと思いますa -> m b。しかし>>=、式の右辺の 2 番目は の型を\x->f xとして扱っているようm bです。何が悪いの?

4

1 に答える 1

15

f\x -> f xdo は、ほとんどの場合、同じことを意味します。ただし、ラムダ式のスコープは可能な限り右に拡張されm >>= (\x -> (f x >>= g))ます。

タイプがm :: m af :: a -> m b、およびg :: b -> m cの場合、左側には が(m >>= f) :: m bあり、右側には があり(\x -> f x >>= g) :: a -> m cます。

したがって、2 つの式の違いは、式と(>>=)同様に演算が実行される順序であり、加算が実行される順序のみが異なります。1 + (2 + 3)(1 + 2) + 3

モナドの法則では、足し算と同様に、両方の答えが同じでなければなりません。

于 2011-12-01T20:50:11.523 に答える