我试图理解无点风格的概念。我创建了一个函数,尝试使用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
,它也不起作用。
答案 0 :(得分:5)
您应该将(+)
传递给uncurry
:
add :: (Int, Int) -> Int
add = uncurry (+)
这是因为uncurry
是一个接受二元函数并返回一元函数的函数:
uncurry :: (a -> b -> c) -> ((a, b) -> c)
你的二进制函数是(+)
,需要两个Num
s并将它们相加。因此,uncurry (+)
会将(+)
转换为:
(Num, Num) -> Num
然后由add
类型签名限制为:
(Int, Int) -> Int