【发布时间】:2014-10-15 01:32:44
【问题描述】:
我在 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')] )
【问题讨论】:
-
小心“部分评估”这个词。这是一个与这里发生的任何事情无关的技术术语。 (这是一种优化技术。)
-
将术语更正为我认为正确反映行为的术语。