【发布时间】:2015-04-11 16:25:00
【问题描述】:
好的,所以我整天都在研究 Haskell 语言报告 (2010),并找到了各种“有趣”的边缘案例。您认为应该是错误的东西,但实际上是允许的。
请特别考虑以下词汇语法参考(第 10.2 节)的摘录:
reservedid → case | class | data | default | deriving | do | else
| foreign | if | import | in | infix | infixl |
| infixr | instance | let | module | newtype | of
| then | type | where | _
您可能希望在该列表中看到qualified……但它不存在。 (就此而言,as 或 hiding 也不是。)
现在我想知道……这是报告中的意外疏忽吗?还是这是一个深思熟虑的设计决定?
看起来 GHC 至少遵循规范的字母,因为它会很高兴地允许您定义一个变量,其名称实际上是 qualified。很奇怪,但确实如此。所以看起来这个名字只是在一种情况下是“特殊的”。相比之下,您可以永远将变量命名为module。我们可以只在文件的开头使这个词变得特别……但我们没有。
【问题讨论】:
-
有趣的是,StackOverflow 似乎不认为
foreign是关键字...(请注意,我不知道它自动检测到哪种语言,所以...)