2016-09-08 2 views
1

Похоже, на самом деле основной вопрос, но если у меня есть:Как проверить гетерогенный конструктор данных?

data LogLevel = Info | Warning | Error Int 
x = Info 
y = Error 13 

Я могу написать

if (x==Info) 

, но как бы я написать тест на наличие ошибок типа?

+1

Возможный дубликат [Как Haskell выполняет сопоставление шаблонов без определения Eq в наших типах данных?] (Http://stackoverflow.com/questions/4718084/how-does-haskell-do-pattern-matching-without -us-define-an-eq-on-our-data-types) (не совсем точно, но, надеюсь, чтение через этот поток ответит на ваш вопрос, но короткий ответ на вопрос, который вы опубликовали, это «сопоставление шаблонов») – jberryman

+0

Очень признателен. – RoyM

ответ

7

Error не является типом; это конструктор данных. Вы можете использовать сопоставление образцов, чтобы различать различные значения типа LogLevel.

case x of 
    Info -> ... 
    Warning -> ... 
    Error n -> ... 

Здесь вы не только принять правильное «ветвь» в зависимости от значения x, но вы также можете получить конкретное число, связанное с Errorn), когда совпадает с узором.

+0

спасибо - это именно то, чего мне не хватало – RoyM

Смежные вопросы