GHCマニュアルのセクション7.6.3.2には、カバレッジ条件が何であるかが記載されています。
カバレッジ条件。クラスの関数従属性ごとtvsleft -> tvsright
に、のすべての型変数がにS(tvsright)
表示される必要がありますS(tvsleft)
。ここで、S
は、クラス宣言の各型変数をインスタンス宣言の対応する型にマッピングする置換です。
平易な英語では、これは、fundepsの型クラスがある場合、たとえば次のことを意味します。
class Convert a b | a -> b where
convert :: a -> b
次のインスタンスを定義できます。
instance Convert String String -- no type variables
instance Convert [a] [a] -- type var a present on both sides
instance Convert (a,b) a -- a on the right => a on the left
ただし、次のインスタンスではありません。
instance Convert String a -- a only present on the right
instance Convert a (a,b) -- b only present on the right