を使用しghci
て計算しました:
Prelude> let m = [1,2]
Prelude> let ys = [4, 5, 6]
Prelude> m >>= (\x -> ys >>= (\y -> return (x, y)))
[(1,4),(1,5),(1,6),(2,4),(2,5),(2,6)]
上記のモナド式は、モナド結合法則のどちらの側にも対応していないようです。
(m >>= f) >>= g ≡ m >>= (\x -> f x >>= g)
モナド結合性を式に適用する方法を知りたい:
m >>= (\x -> ys >>= (\y -> return (x, y)))
は周囲の関数とそれを含む関数の両方で閉じているためreturn (x,y)
、結合法則の左側に存在する中間モナド(m >>= f)
はこの例では存在できないようです。