功能构成问题

时间:2018-03-16 15:09:44

标签: haskell functional-programming

我想用括号和不带两种方式使用函数组合。 我试试这个:

let d = (+5) 
 Prelude> d ( d ( d 2))
 17

但如果试试这个:

Prelude> d . d . d 2

<interactive>:12:1: error:
    * Non type-variable argument in the constraint: Num (a -> c)
      (Use FlexibleContexts to permit this)

为什么会这样?它应该是语义等价的吗?

 d . a x <=> d (a x) ? 

1 个答案:

答案 0 :(得分:4)

不,函数应用程序的优先级高于.,因此它被解析为d . d . (d 2)。您需要将您的函数组合放在这样的parens中:(d . d . d) 2