约束平等

Pth*_*ame 8 polymorphism haskell type-constraints

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

dfl*_*str 6

对的,这是可能的.因为类型类型Constraint是有限的原子类型约束集,所以您可以非常容易地测试它们的相等性.

但是,PolyKinds扩展不是必需的.此外,还有极少数情况下,当这种平等实际上是有用的,因为我没有看到经过多态约束的参数的实用方法c1,c2Bla,所以约束平等将是在任何情况下(同义反复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"
Run Code Online (Sandbox Code Playgroud)