8

Statemtl中的变压器来源

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

什么是“覆盖条件”?我只能说它与 MTPC 和基金组织有关。

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

它是由 Simon Peyton-Jones在这篇论文中定义的。定义 7 定义Coverage Condition。我会引用确切的定义,但唉,我不知道如何在这里重现数学符号。

于 2012-08-14T20:01:24.427 回答