Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 对lambda的这种用法感到困惑吗_Haskell - Fatal编程技术网

Haskell 对lambda的这种用法感到困惑吗

Haskell 对lambda的这种用法感到困惑吗,haskell,Haskell,因此,我认为Lambdas在《向您学习哈斯克尔: (filter (\xs -> length xs > 15) (map chain [1..100])) xs的输入是从生成的列表(映射链[1..100]) 这很容易读 所以这里是我困惑的地方,看看一些真实世界的代码(tm) 这里有一个来自 r的输入从哪里来?r在实际调用函数\r->fmap f(mr)之前不会有值。在fmap的定义中,函数从未被调用-它只存储在ResourceT中。然后可以从ResourceT中取出它并调用它

因此,我认为Lambdas在《向您学习哈斯克尔:

(filter (\xs -> length xs > 15) (map chain [1..100])) 
xs的输入是从
生成的列表(映射链[1..100])
这很容易读

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

这里有一个来自


r的输入从哪里来?

r
在实际调用函数
\r->fmap f(mr)
之前不会有值。在
fmap
的定义中,函数从未被调用-它只存储在
ResourceT
中。然后可以从
ResourceT
中取出它并调用它。此时
r
将获得一个值。

\r->fmap f(mr)
是一个函数,它是。变量
f
m
是执行函数的环境的一部分。此外,由于Haskell是一种函数式语言,因此函数可以在不进行计算或部分计算的情况下传递,就像在本例中一样

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