Haskell函数组合运算符.与空格运算符优先级导致表达式报错疑问
你的理解完全正确。
原因验证
- Haskell中函数应用(空格)的优先级为最高的10级,函数组合运算符
.的优先级为9级,优先级高的运算会先执行。 - 你编写的表达式
reverse . take 3 [1 .. 10]会先执行优先级更高的函数应用逻辑,即先计算take 3 [1..10]得到结果[1,2,3],表达式会被解析为reverse . [1,2,3]。 - 函数组合运算符
.要求左右两侧的操作数都为函数类型,而右侧是列表类型,自然会触发类型不匹配的报错。
正确写法参考
两种常用的修正方式,最终效果都等价于reverse (take 3 [1..10]),运行后得到结果[3,2,1]:
- 给函数组合部分加括号,明确运算优先级:
(reverse . take 3) [1..10] - 使用
$运算符(优先级0)拆分运算逻辑:reverse $ take 3 [1..10]
内容的提问来源于stack exchange,提问作者Johnny
相关产品推荐
相关产品推荐

