Почему Хагс жалуется на `|` в моем объявлении типа данных? - PullRequest
3 голосов
/ 18 марта 2010

Я нахожусь в процессе написания небольшого lisp-интерпретатора в haskell. В процессе я определил этот тип данных, чтобы получить менее набранное число.

data Number = _Int Integer
            | _Rational Rational
            | _Float Double
    deriving(Eq,Show)

Компиляция с использованием объятий завершается с ошибкой:

ОШИБКА "types.hs": 16 - Синтаксическая ошибка в объявлении типа данных (неожиданное `| ')

Строка 16 - это строка с первым | в приведенном выше коде.

1 Ответ

13 голосов
/ 18 марта 2010

Объятия здесь немного окольные. Фактическая проблема не в |, а в подчеркивании в начале имен конструкторов - они не могут начинаться с подчеркивания. Это не просто соглашение, что конструкторы начинаются с заглавной буквы, а часть синтаксиса Haskell.

Мое лучшее предположение относительно того, что Хагс «думает», заключается в том, что, поскольку ваш первый конструктор не был назван правильно, когда вы предлагаете альтернативный конструктор впоследствии, Хагс говорит: «Подождите, я еще не видел действительного конструктора ! В чем дело?"

GHC дает более четкую ошибку:

types.hs:1:14: Not a constructor: `_Int'
...