0

Learn You a Haskell中有一个示例Enum类型:

data Day = Monday | Tuesday | Wednesday | Thursday | Friday | Saturday | Sunday
           deriving (Eq, Ord, Show, Read, Bounded, Enum)

但是当我尝试Day使用没有空格边界值构造函数的范围语法获取 s 列表时,我收到以下错误:

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]

这种行为的原因是什么(例如Ints 的范围不需要空格)?

4

1 回答 1

3

我实际上在Haskell 语法中找不到这方面的规则,但这是一个有根据的猜测。

点也是将模块名称与标识符分开的运算符,如,因此如果允许Prelude.id,语法可能会模棱两可,或者至少更难解析。Monday..Sunday数字是一个例外,因为无论如何它们都是特殊的;点可能是数字文字的一部分,模块名称可能不是数字文字。

于 2013-05-08T08:28:26.433 回答