为什么Haskell优先级只有10个级别? 10这个数字够用吗?

| 我想知道为什么Haskell设计师同意只允许10个优先级?有人发现它不够吗?     
已邀请:
        据我所知,它是完全任意的。我所知道的所有文档都只是将其陈述为事实,没有任何阐述或说明。 但是,如果您考虑一下,为什么还有其他更好的选择?好的,假设10个还不够。您拥有固定度最高的ѭ0,并且您想要其他绑定更紧密的东西。您添加了一个额外的级别,因此您的新最大值为10(即使大多数固定性仅达到9)。 现在您有11个优先级。 (这太荒谬了。甚至都不好笑。)这比10少多少随意性?是什么阻止您添加更多?如果要在现有水平之间建立新水平怎么办?当然,您可以继续添加更多,直到最终您发现自己写writing1ѭ并想知道自己的生活哪里出了问题。 问题是,运算符优先级本质上是相当随意的事情。有一些约定-乘法事物比加法事物绑定更紧密,逻辑运算符的优先级比布尔值函数(如
(==)
)低-但这些约定有些局限,通常覆盖的层次不多。否则,记住操作符优先级的唯一方法是……记住它们,就像简单地记住每个优先级一样。这不仅是一件繁琐的事,而且会使其他人可能也不会记住所有内容的代码变得不透明。人工记忆是非常有限的资源,因此在编码时需要回忆的挑剔细节越少越好。 Haskell中优先级高的运算符的大多数用法属于以下几个粗略的组之一: 伪句法运算符喜欢
($)
的常用用法,通常需要极高或较低的优先级来避免与其他运算符发生冲突。 使用标准运算符或其变体的表达式,其中存在少量标准优先级,新运算符通常应与其所基于的内容共享相同的级别。 专门的运营商集,例如用于EDSL的运营商集,通常选择其符号和优先级来反映EDSL的性质,并且不太可能与其他运营商集共存。 所有这些都可以很好地管理,并且只有几个优先级。更重要的是,它们的特征是要么有效地独立于其他运算符,要么仅与非常有限的一组其他运算符一起使用。开始增加更多的运算符并将它们在单个表达式中混合在一起,很快人们就会开始使用显式括号,因为他们不记得绑定比绑定更紧密。对于我自己来说,在将EDSL样式的运算符(例如4个组合符)与逻辑运算符混合时,我已经很容易出现显式括号,因为我通常不记得每个人都有的确切优先级。 因此,我们已经确定:1)许多额外的优先级并没有太大用处,因为它无法跟踪; 2)我们选择的任何限制都将同样是任意的...为什么10 ?我会猜测“因为固定性值只有一位数字”。     
        级别的数量是任意的,并且我记得这个决定是,很多级别只会使操作员难以记住交互方式。例如Prolog允许1000个级别,但我从未发现它比Haskell好得多。 扩展Haskell优先级,您可以想像成一个有理数,这样您就可以始终在两个现有运算符之间放入一个运算符。但是更好的选择可能是切换到优先顺序为部分顺序。因此,给定两个运算符,可以将它们关联起来,然后进行相应的处理,或者不关联的话,则必须加上括号。     

要回复问题请先登录注册