我在Haskell学习Monads,我正在分析这个例子(http://learnyouahaskell.com/a-fistful-of-monads):
[1,2] >>= \n -> ['a','b'] >>= \ch -> return (n,ch)
我想了解函数的这一部分发生了什么:
\n -> ['a','b'] >>= \ch -> return (n,ch)
我的理解是\ch -> return (n,ch)
由\n -> ['a','b']
作为参数组成,但我不确定这是怎么回事。我以为它有以下组成的功能:
[1,2] >>= \n -> [n, \n -> ['a','b']]
但这似乎没有输出与完整表达式相同的结果。
编辑1:
考虑到完整括号内的答案是:
[1,2] >>= ( \n -> ( ['a','b'] >>= \c -> return (n,c) ) )
这使我获得了这个组合功能:
[1,2] >>= ( \n -> [(n,'a'),(n,'b')] )
答案 0 :(得分:3)
实际上有点不同。括号如下
[1,2] >>= (\n -> ['a','b'] >>= (\ch -> return (n,ch)))
或者,如果您愿意
let step1 n =
let step2 ch = return (n, ch)
in ['a','b'] >>= step2
in [1,2] >>= step1