分配型约束族的转换

Conversion of distributive type families of constraints

假设:导致 Constraint 的类型族总是分布在它们的 representational 参数上。

例如,如果Fam的第二个参数具有表示作用,则Fam x Eq `And` Fam x Show等同于Fam x (Eq `And` Show)

问题:

直觉上,如果 Fam x c 使用 c 以一种反相的方式,这就会崩溃。 现在可以使用量化约束。例如

Fam x c = (forall a. c a => D a x)

有些 D a x :: Constraint.

(我认为这是 representational,即使我不是完全肯定。)

因此 Fam x (Show `And` Eq) 将意味着

forall a. (Show a, Eq a) => D a x

(Fam x Eq, Fam x Show) 表示

( forall a. (Show a) => D a x
, forall a. (Eq a) => D a x )

这两个约束不等价。例如,如果 D a x = (Show a, Eq a) 前者是微不足道的满足,而后者则不是。