这些行正确执行:
Prelude> 1 / (1 + 1)
0.5
Prelude> (/) 1 $ (+) 1 1
0.5
Prelude> (/) 1 $ 1 + 1
0.5
这个没有:
Prelude> 1 / $ (+) 1 1
<interactive>:1:4: parse error on input `$'
为什么?
答案 0 :(得分:15)
/是一个中缀运算符。它需要有效的表达方式。 1
是一个文字,因此是一个有效的表达。但是,在右侧,你有另一个中缀运算符,它需要在另一个有效表达式之前(1 /
不是一个有效的表达式,因为它缺少/运算符的右侧参数)。这就是解析器报告错误的原因(语法无效 - 请参阅haskell报告以获取丑陋的细节;)
答案 1 :(得分:1)
我认为这是因为$
是一个需要前面的函数的运算符。上一个示例中的表达式1 /
未计算为函数。在这种情况下,解析器期望找到(数字)表达式作为/
运算符的第二个参数。