在页面http://en.wikibooks.org/wiki/Haskell/do_Notation上,有一种非常方便的方法来将do语法绑定到函数形式(我的意思是使用>> =)。它非常适用不少情况下,直到我遇到了一段代码,涉及职能单子(( - >)R)将语法转换为>> = with(( - >)r)monad
的代码是
addStuff :: Int -> Int
addStuff = do
a <- (*2)
b <- (+10)
return (a+b)
这相当于为定义
addStuff = \x -> x*2+(x+10)
现在,如果我用方便的方法重写做兼职,我得到
addStuff = (*2) >>= \a ->
(+10) >>= \b ->
a + b
这给编译埃罗河我知道a,b是Int(或其他类型的Num),所以最后一个函数(\ b - > a + b)的类型是Int - > Int,而不是Int - > Int - > Int。
但是,这是否意味着并不总是有一种方法可以从do转换为>> =?有没有解决这个问题?或者我只是不正确地使用规则?
我看到这个作品。但重点可能不是格式,而是将Int包裹到(Int - > Int)的返回值。不管怎么说,还是要谢谢你! – 2014-12-19 06:16:38
是的,你是对的。也感谢你。 – 2014-12-19 06:24:06