真实世界的 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
因此,您必须至少实现这两种方法中的一种,否则它将循环。而且您可以灵活地选择哪一个,哪个整洁。
我的问题是,如果没有覆盖足够的默认值并且默认值形成循环,是否有办法获得警告或其他东西?对我来说很奇怪,如此疯狂聪明的编译器在这个例子中很好。