Haskell 对lambda的这种用法感到困惑吗
因此,我认为Lambdas在《向您学习哈斯克尔: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中取出它并调用它
(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)