8

Statemtl状態のトランスのソース

-- ---------------------------------------------------------------------------
-- Instances for other mtl transformers
--
-- All of these instances need UndecidableInstances,
-- because they do not satisfy the coverage condition.

「カバレッジ条件」とは何ですか?私が言えるのは、それがMTPCとfundepsと関係があるということだけです。

4

2 に答える 2

15

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
于 2012-08-14T20:02:50.407 に答える
3

この論文では、SimonPeyton-Jonesによって定義されています。定義7はを定義しますCoverage Condition。正確な定義を引用しますが、残念ながら、ここで数学記号を再現する方法がわかりません。

于 2012-08-14T20:01:24.427 に答える