Как сделать тип экземпляром Eq - PullRequest
11 голосов
/ 02 декабря 2011

У меня есть тип данных с именем Praat. Я хочу, чтобы Praat был экземпляром Eq, чтобы два Praat были равны тогда и только тогда, когда mx равны. Как это сделать?

-- data type
data Praat t = Praat [k] [(k,k,k,k)] 

-- praat gives the maximum frequency
Praat t -> Int
mx (Praat [] _) = 0
mx (Praat (e:es) pt) = ...........

Вот так я пытаюсь определить экземпляр, но он не работает.

-- I want to make Praat instance of Eq so that two Praat are equal
-- when their respective `mx` are equal
instance Eq Praat where
   mx :: (Praat k)->Int
   (mx k) == (mx k) = True
   _ == _ = False

1 Ответ

18 голосов
/ 02 декабря 2011
instance Eq Praat where
    x == y = mx x == mx y

Это в значительной степени прямой перевод того, что вы сказали.x равно y, когда mx x == mx y.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...