基本上,给定{-# LANGUAGE PolymorphicKinds, ConstraintKinds, TypeFamilies #-}
(以及更多,如果需要),(~)
类型级运算符是否适用于类Constraint
的类型级表达式?我试着用谷歌搜索答案,但没有运气。
答案 0 :(得分:6)
是的,有可能。因为类型Constraint
是有限的原子类型约束集,所以你可以很容易地测试它们的相等性。
但是,PolyKinds
扩展名不是必需的。此外,这种平等实际上很有用的情况很少,因为我没有看到将多态约束作为参数c1
,c2
传递给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"