В принципе, при заданном {-# LANGUAGE PolymorphicKinds, ConstraintKinds, TypeFamilies #-}
(и более, если необходимо), работает ли оператор уровня типа (~)
с выражениями уровня типа типа Constraint
? Я попытался найти ответ в Google, но безуспешно.
Равенство ограничений
comment
Вопрос странный, но заданный хорошо. Из любопытства, что бы вы сделали с равенством ограничений?
- person Daniel Wagner   schedule 08.03.2012
comment
@Daniel Wagner Я пишу кросс-парадигму EDSL, в которой используется общая система функций, и по разным причинам я не могу напрямую использовать классы типов. Я мог бы обойтись без этого, но это привело бы к чрезвычайно неуклюжим типам и, возможно, к некоторым ненужным ограничениям.
- person Ptharien's Flame   schedule 08.03.2012
Ответы (1)
Да, это возможно. Поскольку типы вида 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"
person
dflemstr
schedule
08.03.2012