gpt4 book ai didi

haskell - fmap 的参数太多

转载 作者:行者123 更新时间:2023-12-02 16:20:04 29 4
gpt4 key购买 nike

第一个参数,即 fmap 预期是一个带有一个参数的函数。

fmap :: Functor f => (a -> b) -> f a -> f b

然后我在前奏中尝试如下:

Prelude> x = fmap (\x y -> x * y)

如您所见,fmap 的第一个参数是一个函数,它有两个参数。为什么编译器会让它通过?

我传递给上面的 fmap 的函数有两个参数,而不是一个!

最佳答案

Haskell 实际上并不存在带有多于(或少于)一个参数的函数。 “双参数函数”实际上只是一个接受一个参数并生成另一个接受另一个参数的函数的函数。也就是说,\x y -> x * y 只是 \x ->\y -> x * y 的语法快捷方式。这个概念称为柯里化(Currying)。

所以这应该可以解释您的示例中发生的情况。您的 fmap 只会将数字的 f 转换为函数的 f。例如,x [1,2,3] 将生成列表 [\y -> 1 * y,\y -> 2 * y,\y -> 3 * y] (又名 [(1*), (2*), (3*)])。

关于haskell - fmap 的参数太多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45038277/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com