对这种lambda的使用感到困惑

时间:2012-09-07 22:25:58

标签: haskell

所以我想起了在学习你一个Haskell中演示的Lambdas:

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

xs的输入是从(map chain [1..100]))生成的列表 这很容易阅读。

所以这里我感到困惑,看着一些真实世界代码(tm)。

这是一个来自的功能 conduit

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

r的输入来自哪里?

2 个答案:

答案 0 :(得分:12)

在实际调用函数r之前,

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

答案 1 :(得分:6)

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