gpt4 book ai didi

haskell - 在 Haskell 中以无点风格使用 curry 的声明问题

转载 作者:行者123 更新时间:2023-12-02 09:37:18 28 4
gpt4 key购买 nike

我试图理解无点风格的概念。我创建了一个函数,尝试使用 uncurry 添加两个值。

add = (+) . uncurry 

结果提示:

No instance for (Num ((a0, b0) -> c0))
arising from a use of `+'
Possible fix:
add an instance declaration for (Num ((a0, b0) -> c0))
In the first argument of `(.)', namely `(+)'
In the expression: (+) . uncurry
In an equation for `add': add = (+) . uncurry

这是一个声明问题吗?我尝试了 add::(Int, Int) -> Int,它也不起作用。

最佳答案

您应该将 (+) 传递给 uncurry:

add :: (Int, Int) -> Int
add = uncurry (+)

这是因为 uncurry 是一个接受二元函数并返回一元函数的函数:

uncurry :: (a -> b -> c) -> ((a, b) -> c)

您的二元函数是(+),它需要两个Num并将它们相加。因此 uncurry (+) 会将 (+) 转换为:

(Num, Num) -> Num

然后通过 add 类型签名限制为:

(Int, Int) -> Int

关于haskell - 在 Haskell 中以无点风格使用 curry 的声明问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24195844/

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