2013-05-08 4 views
0
샘플 Enum 유형이 Learn You a Haskell에서

:하스켈 목록 범위 구문

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

tl; dr :'Thursday'는'Thursday.'를 사용할 때 모듈 이름으로 해석됩니다. – soulcheck

+0

언어는 _enforcing_ 좋은 스타일로, 드문 경우입니다. '..' 주위에 공백을 두지 않는 것은 ** 못생긴 **입니다. 나는 그것을 볼 때마다 나는 싫증이 난다. –

답변

2

Haskell syntax에서 실제로 이에 대한 규칙을 찾을 수는 없지만 여기에는 교양있는 추측이 있습니다.

도트는 Prelude.id처럼 모듈 이름을 식별자에서 분리하는 연산자이기도하므로 Monday..Sunday이 허용되면 문법이 모호하거나 해석하기가 더 어려울 수 있습니다. 어쨌든 특수 문자이기 때문에 숫자는 예외입니다. 점은 숫자 리터럴의 일부일 수 있으며 모듈 이름은 숫자 리터럴이 아닐 수도 있습니다.

+2

숫자는 대문자로 시작하지 않으므로 모듈 이름이 하나부터 시작해야하므로 모호성이 없습니다. –