为什么这个定义在GHCi中失败了?
let f = (*2)+1
使用
No instance for (Num (a0 -> a0))
arising from a use of `+'
Possible fix: add an instance declaration for (Num (a0 -> a0))
In the expression: (* 2) + 1
In an equation for `f': f = (* 2) + 1
与以下内容有何不同?
let f x = x*2+1
答案 0 :(得分:8)
(*2)
定义了Num a => a -> a
类型的函数,与
let multTwo x = x * 2
因此您尝试将1添加到函数中。
您可以改为使用构图:
let f = (+1) . (*2)
答案 1 :(得分:6)
(*2)
是一个功能。所以你试图将1
添加到一个不起作用的函数中(除了函数的Num
实例)。
答案 2 :(得分:2)
根据其他答案,您尝试将1添加到某个功能中。
我可以看到你正在尝试做的事情;类似于前面的东西'钻营:
let f = \x -> x * 2 + 1
与
相同let f x = x * 2 + 1
根据Lee的回答,f = (+ 1) . (* 2)
适用于您所期望的一切。你也可以做这样的事情来反过来应用所有东西:
import Control.Arrow
let f = (* 2) >>> (+ 1)
-- Prelude Control.Arrow> f 5
-- 11
这可能更符合你脑子里的想法。