У меня есть пользовательский тип значения Value
, помеченный своим типом ValType
:
data ValType
= Text
| Bool
data Value (tag :: ValType) where
T :: Text -> Value 'Text
B :: Bool -> Value 'Bool
и я хотел бы определить функцию, которая разворачивает экзистенциально квантифицированный Value
, то есть она должна иметь следующую сигнатуру типа:
data SomeValue = forall tag. SomeValue (Value tag)
unwrap :: SomeValue -> Maybe (Value tag)
Я могу определить развертку для 'Bool
и 'Text
отдельно, но как определить полиморфный unwrap
?