函数组合问题



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

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) ? 

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

最新更新