2015-11-18 2 views
2

Я изучаю Haskell, и мне было предоставлено следующее назначение: у меня есть новый тип, состоящий из двух смешанных типов данных, и я должен сделать его экземпляром Eq без использования вывода. Вот что у меня есть:Сделайте экземпляр newtype из Eq

data Number = One | Two | Three deriving Eq 
data Character = A | B | C deriving Eq 
newtype Combo = Combo ((Character, Character),(Number, Number)) 

instance Eq Combo where 
    Combo ((a1, a2),(x1,x2)) == Combo ((b1, b2),(y1, y2)) = (a1 == b1) && (a2 == b2) && (x1 == y1) && (x2 == y2) 

Однако Hugs идет все

ERROR "testing.hs":5 - Ambiguous class occurrence "Eq" 
*** Could refer to: Hugs.Prelude.Eq Main.Eq Main.Eq Main.Eq Main.Eq Main.Eq 

Как это исправить? Я не могу действительно импортировать Eq, скрывая что-то, потому что мне нужно, чтобы проверить, равен ли данный член числа или символа.

+6

Если это действительно весь код, который у вас есть, это может быть ошибка в Hugs. Также обратите внимание, что Hugs больше не разрабатывается. –

+0

Да, но я должен использовать его, к сожалению. – skulpt

+1

вы уверены, что не переопределили «класс Eq» где-то в вашем файле (или грейдер ... о, подождите, так это FP101x, так что он, вероятно, не имеет грейдера) – Carsten

ответ

3

Изменение

instance Eq Combo where 
Combo ((a1, a2),(x1,x2)) == Combo ((b1, b2),(y1, y2)) = (a1 == b1) && (a2 == b2) && (x1 == y1) && (x2 == y2) 

в

instance Main.Eq Combo where 
Combo ((a1, a2),(x1,x2)) == Combo ((b1, b2),(y1, y2)) = (a1 == b1) && (a2 == b2) && (x1 == y1) && (x2 == y2) 

по-видимому, зафиксировано, что ошибка.

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