Haskell函数组合的一些错误和困难

时间:2018-04-05 07:25:52

标签: haskell

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无效。

1 个答案:

答案 0 :(得分:6)

代码f . g x不起作用,因为它被解析为f . (g x)。也就是说,首先g应用于x,然后您尝试使用f的结果获得g x的合成。

要使其工作,您可以使用括号(f . g) x包围合成,或使用$运算符,该运算符具有所有运算符的最低优先级,因此可用于分隔事物:{{ 1}}。