5

所以我认为 Lambdas 就像 Learn You a Haskell 中所展示的那样:

(filter (\xs -> length xs > 15) (map chain [1..100])) 

xs 的输入是从(map chain [1..100])) That's easy to read 生成的列表。

所以这就是我感到困惑的地方,看看一些真实世界的代码(tm)。

这是来自 导管的功能

fmap f (ResourceT m) = ResourceT $ \r -> fmap f (m r)

r 的输入来自哪里?

4

2 回答 2

12

r\r -> fmap f (m r)在实际调用函数之前不会有值。在 的定义中fmap,该函数永远不会被调用 - 它只存储在ResourceT. 然后可以稍后将其从 中取出ResourceT并调用。那时r将获得价值。

于 2012-09-07T22:33:46.713 回答
6

\r -> fmap f (m r)是一个函数,它是一个闭包的例子。变量fm是函数将被执行的环境的一部分。此外,由于 Haskell 是一种函数式语言,因此可以在不被评估或部分评估的情况下传递函数,就像在这种情况下一样。

于 2012-09-07T22:39:36.650 回答