Haskell列表范围语法

时间:2013-05-08 08:20:10

标签: haskell

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的范围不需要空格)?

1 个答案:

答案 0 :(得分:2)

我实际上无法在Haskell syntax中找到相关规则,但这是一个有根据的猜测。

点也是将模块名称与标识符分开的运算符,如Prelude.id中所示,因此如果允许Monday..Sunday,语法可能不明确,或者至少难以解析。对数字有例外,因为这些都是特殊的;点可能是数字文字的一部分,模块名称可能不是数字文字。