What is the “coverage condition”?

2019-07-30 23:58发布

对于源State在MTL变压器状态:

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

什么是“覆盖条件”? 我能说的是,它是与MTPCs和fundeps。

Answer 1:

第7.6.3.2 的GHC手册告诉我们覆盖的条件是什么:

覆盖条件。 对于每个函数依赖, 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


Answer 2:

它在定义本文由西蒙·佩顿-琼斯。 定义7定义Coverage Condition 。 我想引用的确切定义,但很可惜,我不知道怎么在这里重现数学符号。



文章来源: What is the “coverage condition”?