【发布时间】:2019-05-16 11:31:48
【问题描述】:
当没有指定函数时,我试图了解列表 monad:
func::[(Int,String)]
func =do
a <- [1,2,3]
b <- ["a","b"]
return (a,b)
我知道(>>=) ml f=concat (map f ml)。那么在我们的例子中f 的值是多少?
当我说 :
a<-[1,2,3] 会被翻译成[1,2,3]>>=(\x->return x)。
如果不是,为什么它不会崩溃,因为我没有为绑定运算符提供任何功能?
稍后编辑
感谢您的回复,虽然我了解多个 >>= 会发生什么,但我更关心这个简单的场景:
mym =do
a<-[1,2,3]
return a
什么是等价物? [1,2,3] >>= (\x -> return x)
【问题讨论】:
-
是的,
[1,2,3] >>= (\x -> return x)在您的编辑中是正确的。 -
或者干脆
[1,2,3] >>= return。 -
根据 Monad 定律,这就是
[1,2,3]。