约束平等

时间:2012-03-08 18:28:46

标签: haskell polymorphism type-constraints

基本上,给定{-# LANGUAGE PolymorphicKinds, ConstraintKinds, TypeFamilies #-}(以及更多,如果需要),(~)类型级运算符是否适用于类Constraint的类型级表达式?我试着用谷歌搜索答案,但没有运气。

1 个答案:

答案 0 :(得分:6)

是的,有可能。因为类型Constraint是有限的原子类型约束集,所以你可以很容易地测试它们的相等性。

但是,PolyKinds扩展名不是必需的。此外,这种平等实际上很有用的情况很少,因为我没有看到将多态约束作为参数c1c2传递给Bla的实用方法,所以约束平等在每种情况下都是重言式(Show ~ Show在这里):

{-# LANGUAGE ConstraintKinds, TypeFamilies #-}

type Bla c1 c2 a = (c1 a, c2 a, c1 ~ c2)

foo :: Bla Show Show a => a -> IO ()
foo = print

main = foo "Bla"