Haskell で次のように入力すると、次のようになります。
{-# LANGUAGE FlexibleInstances, OverlappingInstances, UndecidableInstances #-}
class Class a
instance Class a
instance Eq a => Class a
GHCiにロードすると、次のエラーが発生します。
Test.hs:5:10:
Duplicate instance declarations:
instance [overlap ok] Class a -- Defined at Test.hs:5:10
instance [overlap ok] Eq a => Class a -- Defined at Test.hs:6:10
Failed, modules loaded: none.
a
制約が無視されると仮定すると、両方がインスタンスであり、どちらもより具体的ではないことがわかり、失敗する理由をある程度理解しています。しかし、なぜオーバーラップは問題ないと言っているのでしょうか?
また、これらの種類のオーバーラップを機能させるために言語拡張機能を追加することは可能ですか?それは役に立ちますか?
そして最後に、現在のGHCで別の方法で私が意図していることはありますEq
か?