繁体   English   中英

Monad在haskell中的关联性规则

[英]Monad's associativity rule in haskell

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

有什么不同于f\\x->fx ??

我认为它们的类型相同a -> mb 但似乎等式右边的第二个>>=\\x->fx的类型视为mb 出了什么问题?

对于大多数目的,表达式f\\x -> fx意思相同。 但是,lambda表达式的范围尽可能向右延伸,即m >>= (\\x -> (fx >>= g))

如果类型是m :: maf :: a -> mb ,并且g :: b -> mc ,那么在左边我们有(m >>= f) :: mb ,在右边我们有(\\x -> fx >>= g) :: a -> mc

因此,两个表达式之间的差异就是执行(>>=)操作的顺序,就像表达式1 + (2 + 3)(1 + 2) + 3仅在添加顺序上不同执行。

monad法律要求,与添加一样,两者的答案应该相同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM