В Real World Haskell есть этот пример:
class BasicEq3 a where
isEqual3 :: a -> a -> Bool
isEqual3 x y = not (isNotEqual3 x y)
isNotEqual3 :: a -> a -> Bool
isNotEqual3 x y = not (isEqual3 x y)
instance BasicEq3 Bool
И когда я запускаю его в GHCI:
#> isEqual3 False False
out of memory
Итак, вы должны реализовать хотя бы один из 2-х методов или зациклиться. И вы получаете гибкость в выборе того, который является опрятным.
Вопрос, который у меня есть, есть способ получить предупреждение или что-то, если не переопределить достаточное количество значений по умолчанию, а значения по умолчанию составляют цикл? Мне кажется странным, что компилятор, который настолько сумасшедший, умен в этом примере.