Fiz*_*zzz 2 haskell declaration pointfree
我试图理解无点风格的概念.我做了一个函数尝试使用添加两个值uncurry.
add = (+) . uncurry
Run Code Online (Sandbox Code Playgroud)
并且结果抱怨:
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
Run Code Online (Sandbox Code Playgroud)
这是一个声明问题吗?我试过add :: (Int, Int) -> Int,它不起作用.
你应该(+)转到uncurry:
add :: (Int, Int) -> Int
add = uncurry (+)
Run Code Online (Sandbox Code Playgroud)
这是因为uncurry是一个带二进制函数并返回一元函数的函数:
uncurry :: (a -> b -> c) -> ((a, b) -> c)
Run Code Online (Sandbox Code Playgroud)
您的二进制函数(+)需要两个Nums并将它们相加.因此uncurry (+)将转变(+)为:
(Num, Num) -> Num
Run Code Online (Sandbox Code Playgroud)
然后由add类型签名限制为:
(Int, Int) -> Int
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
84 次 |
| 最近记录: |