(m >>= f) >>= g
= m >>= (\x -> f x >>= g)
f
ととの違いは何\x->f x
ですか??
同じタイプだと思いますa -> m b
。しかし>>=
、式の右辺の 2 番目は の型を\x->f x
として扱っているようm b
です。何が悪いの?
(m >>= f) >>= g
= m >>= (\x -> f x >>= g)
f
ととの違いは何\x->f x
ですか??
同じタイプだと思いますa -> m b
。しかし>>=
、式の右辺の 2 番目は の型を\x->f x
として扱っているようm b
です。何が悪いの?
式f
と\x -> f x
do は、ほとんどの場合、同じことを意味します。ただし、ラムダ式のスコープは可能な限り右に拡張されm >>= (\x -> (f x >>= g))
ます。
タイプがm :: m a
、f :: 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
モナドの法則では、足し算と同様に、両方の答えが同じでなければなりません。