在Learn You a Haskell中有一个示例Enum
类型:
data Day = Monday | Tuesday | Wednesday | Thursday | Friday | Saturday | Sunday
deriving (Eq, Ord, Show, Read, Bounded, Enum)
但是当我尝试使用范围语法获取Day
的列表而没有空格边界值构造函数时,我收到以下错误:
ghci> [Thursday..Sunday]
<interactive>:30:2:
Failed to load interface for `Thursday'
Use -v to see a list of the files searched for.
<interactive>:30:2:
A section must be enclosed in parentheses thus: (Thursday.. Sunday)
当我使用空格时,一切正常:
ghci> [Thursday .. Sunday]
[Thursday,Friday,Saturday,Sunday]
这种行为的原因是什么(例如Int
的范围不需要空格)?
答案 0 :(得分:2)
我实际上无法在Haskell syntax中找到相关规则,但这是一个有根据的猜测。
点也是将模块名称与标识符分开的运算符,如Prelude.id
中所示,因此如果允许Monday..Sunday
,语法可能不明确,或者至少难以解析。对数字有例外,因为这些都是特殊的;点可能是数字文字的一部分,模块名称可能不是数字文字。