对这种lambda的使用感到困惑

Mic*_*ard 5 haskell

所以我认为Lambdas在Learn You a Haskell中得到了证明:

(filter (\xs -> length xs > 15) (map chain [1..100])) 
Run Code Online (Sandbox Code Playgroud)

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

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

这是管道的功能

fmap f (ResourceT m) = ResourceT $ \r -> fmap f (m r)
Run Code Online (Sandbox Code Playgroud)

r的输入来自哪里?

sep*_*p2k 12

r\r -> fmap f (m r)实际调用函数之前,它将没有值.在定义中fmap,函数永远不会被调用 - 它只存储在一个ResourceT.然后它可以被取出ResourceT并被召唤出来.那是什么时候r会得到一个价值.


Dan*_*kov 6

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

  • 如果我可以选择两个答案,我会的.无论如何都要投票. (2认同)