我想用括号和不带两种方式使用函数组合。 我试试这个:
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) ?
答案 0 :(得分:4)
不,函数应用程序的优先级高于.
,因此它被解析为d . d . (d 2)
。您需要将您的函数组合放在这样的parens中:(d . d . d) 2
。