実際の 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 つのメソッドの少なくとも 1 つを実装する必要があります。そうしないと、ループします。そして、あなたはどれがきちんとしたものかを柔軟に選択できます。
私が持っている質問は、十分なデフォルトをオーバーライドせず、デフォルトがループを形成する場合、警告または何かを取得する方法はありますか? 非常にスマートなコンパイラがこの例で問題ないことは、私には奇妙に思えます。