新来的Haskell,我在这片表达式的为什么(!!)和(。)共享优先级9?
matches !! length . count
不能混合打一个简单的错误“!!” [infixl 9]和'。' [infixr 9] in the infixr表达式
这让我感到惊讶 - 为什么这些运营商会有优先权?什么阻止了Haskell的设计者在以上的优先级比(!!)
?
我无法想象这只是被忽视,所以我认为这里有一个理由,我失踪了。
注意我认识到,应用(!!)
到由(.)
组成的功能仍然会导致在编译时错误。我很好奇为什么Haskell的设计方式允许出现这个意外的错误信息。
为什么你会想到'.'有比'的优先级高!!',而不是周围的其他方式? – melpomene
我不确定在这个特定的冲突背后是否有理由。只有“十级”的优先级,一些冲突必然会发生。 – duplode
@duplode,十个优先级的选择是坦率的离奇。我希望在等价关系下有更像偏序的东西,从而允许运算符对任意其他运算符的优先级更高,更低或相等。但我想设计师并不想为此设计一个真正复杂的系统。 – dfeuer