所以我想起了在学习你一个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的输入来自哪里?
答案 0 :(得分:12)
r
之前, \r -> fmap f (m r)
将没有值。在fmap
的定义中,函数永远不会被调用 - 它只存储在ResourceT
中。然后它可以从ResourceT
中取出并调用。那是r
获得价值的时候。
答案 1 :(得分:6)
\r -> fmap f (m r)
是一个函数,它是closure的一个例子。变量f
和m
是将要执行函数的环境的一部分。此外,由于Haskell是一种函数式语言,因此可以在不进行评估或部分评估的情况下传递函数。就像在这种情况下一样。