Да, это возможно.Поскольку типы вида 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"