Минимальное изменение будет следующим:
instance (Num a, Ord a, TooMany a) => TooMany (a, a) where
tooMany (t1, t2) = (t1 + t2) > 44
Два замечания об этом экземпляре: мне пришлось добавить ограничение Ord
из-за вызова (>)
и ограничение TooMany
избыточен, потому что реализация не вызывает tooMany
с a
в качестве аргумента.Я подозреваю, что предполагаемое решение упражнения имеет немного другую реализацию метода tooMany
- я призываю вас попытаться найти способ реализовать это с использованием ограничения TooMany a
и без использования ограничения Ord a
!
Для вашего newtype
правильный синтаксис следующий:
newtype YetAnotherTooMany a = YetAnotherTooMany (a, a)
deriving (Eq, Show, TooMany)
Вам потребуется удалить (Int, Int)
экземпляр TooMany
, чтобы этот точный синтаксис работал, так как в противном случае существуют перекрывающиеся экземплярывыбрать во время получения.Тем не менее, я ожидаю, что предполагаемое решение для упражнения - написать экземпляр для этого newtype
самостоятельно, исходя из предположения, что экземпляр (a, a)
вообще не существует - поскольку предположительно цель состоит в том, чтобы научиться использовать newtype
, чтобы избежатьв первую очередь проблемы с перекрывающимися экземплярами.