Haskell 报告的一个不起眼的角落
An obscure corner of the Haskell Report
Haskell 2010 年报告的第 5.2 节涉及模块导出列表。在某一时刻,它 says:
Entities in an export list may be named as follows:
- A value, field name, or class method, whether declared in the module body or imported, may be named by giving the name of the value as a qvarid, which must be in scope. Operators should be enclosed in parentheses to turn them into qvarids.
...
但是,呃……我是不是漏掉了什么?因为根据 Chapter 10 中的语法参考:
qvarid → [ monid . ] varid
varid → ( small { small | large | digit | ' })
那么在哪个宇宙中将运算符放在括号中会将其变成 qvarid?在我看来,运算符显然是 varsym(或者 qvarsym)。
有人知道这里发生了什么吗?我的意思是,很清楚 Haskell绝对支持在导出列表中写入运算符,但报告中的语法描述似乎没有意义...
等等,等等……根据10.5节给出的无控制语法:
export → qvar | qtycon ... | qtycls ... | module
monid
...
var → varid | (
varsym )
qvar → qvarid | (
qvarsym )
所以它似乎是不是一个qvarid,它应该是一个qvar .所以这只是一个错字,我猜?官方报告中是否有修复此类问题的流程?
Haskell 2010 年报告的第 5.2 节涉及模块导出列表。在某一时刻,它 says:
Entities in an export list may be named as follows:
- A value, field name, or class method, whether declared in the module body or imported, may be named by giving the name of the value as a qvarid, which must be in scope. Operators should be enclosed in parentheses to turn them into qvarids.
...
但是,呃……我是不是漏掉了什么?因为根据 Chapter 10 中的语法参考:
qvarid → [ monid . ] varid
varid → ( small { small | large | digit | ' })
那么在哪个宇宙中将运算符放在括号中会将其变成 qvarid?在我看来,运算符显然是 varsym(或者 qvarsym)。
有人知道这里发生了什么吗?我的意思是,很清楚 Haskell绝对支持在导出列表中写入运算符,但报告中的语法描述似乎没有意义...
等等,等等……根据10.5节给出的无控制语法:
export → qvar | qtycon ... | qtycls ... |
module
monid...
var → varid |
(
varsym)
qvar → qvarid |
(
qvarsym)
所以它似乎是不是一个qvarid,它应该是一个qvar .所以这只是一个错字,我猜?官方报告中是否有修复此类问题的流程?