真实世界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
Run Code Online (Sandbox Code Playgroud)
当我在GHCI中运行时:
#> isEqual3 False False
out of memory
Run Code Online (Sandbox Code Playgroud)
因此,您必须实现两种方法中的至少一种,否则它将循环.而且你可以灵活地选择哪一个很整洁.
我的问题是,有没有办法得到一个警告或什么,如果没有覆盖足够的默认值和默认值形成一个循环?我觉得奇怪的是,这个例子对于那么疯狂的编译器来说很好.
haskell ×1