2015-01-18 3 views
0

Я пытаюсь объявить экземпляр, используя Haskell, здесь я имею мой тип данных:Instance уравнения в Haskell -> Неполная модели

data Classification = Aproved Int 
        | Denied 
        | Missing 
        deriving (Show) 

и экземпляр объявленный:

instance Eq Classificacao where 
    Denied  == Denied = True 
    Missing == Missing = True 
    Aproved x == Aproved y = y==x 

When Я пытаюсь сравнить конструкторы данных, это дает мне ошибку Неисчерпывающий рисунок, если я использую в GHCi Denied==Missing

Что мне делать? Я все еще учусь.

+3

Это потому, что выражение 'Denied == Missing' не имеет определенное значение. Если вы хотите, чтобы все остальное оценивалось как «False», вам нужно добавить '_ == _ = False' в конце - иначе оно будет оцениваться до нижней (неопределенное значение). –

+2

Поместите ': set -Wall' в ваш .ghci-файл, и компилятор предупредит вас об этой ошибке. – user2407038

ответ

9

Добавить финальный матч шаблона для проверки на любую другую комбинацию входов в качестве False, например, так:

instance Eq Classification where 
Denied  == Denied = True 
Missing == Missing = True 
Aproved x == Aproved y = y==x  
x == y = False 
+2

Большое спасибо shree.pat18. Я очень ценю это! – skills

+2

@skills Совет. Поскольку последний случай заключается в том, чтобы обрабатывать все остальное, нам не нужно называть выражения 'x' или' y' - мы могли бы написать '_ == _ = False', не влияя на результат. –

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