约束的分布类型族的转换

时间:2019-07-17 10:25:35

标签: haskell type-families constraint-kinds

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

例如,如果Fam x Eq `And` Fam x Show的第二个参数具有代表性,则Fam x (Eq `And` Show)等效于Fam

问题:

  • 以上假设确实正确吗?有参考吗?
  • GHC是否可以以某种方式利用此规则转换等效约束?

1 个答案:

答案 0 :(得分:1)

从直觉上讲,如果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)对前者是微不足道的,而对后者则不满意。