f x = x + 3
g x = x * 3
<interactive>:17:1: error:
? Non type-variable argument in the constraint: Num (a -> c)
(Use FlexibleContexts to permit this)
? When checking the inferred type
it :: forall c a. (Num (a -> c), Num c) => a -> c
我在使用函数组合运算符时遇到错误。为什么不起作用? f x
有效,g x
有效,甚至f(g x)
有效,但f.g x
无效。
答案 0 :(得分:6)
代码f . g x
不起作用,因为它被解析为f . (g x)
。也就是说,首先g
应用于x
,然后您尝试使用f
的结果获得g x
的合成。
要使其工作,您可以使用括号(f . g) x
包围合成,或使用$
运算符,该运算符具有所有运算符的最低优先级,因此可用于分隔事物:{{ 1}}。