Experimentando con tipos existenciales. Parece ser una gran manera de obtener flexibilidad de tipo.¿Cómo descomprimir un tipo existencial haskell?
Estoy solucionando un problema con unboxing de tipo existencial después de que lo envolví. Mi código de la siguiente manera:
{-# LANGUAGE ExistentialQuantification #-}
class Eq a => Blurb a
data BlurbBox = forall a . Blurb a => BlurbBox a
data Greek = Alpha | Beta deriving Eq
instance Blurb Greek
data English = Ay | Bee deriving Eq
instance Blurb English
box1 :: BlurbBox
box1 = BlurbBox Alpha
box2 :: BlurbBox
box2 = BlurbBox Ay
main = do
case box1 of
BlurbBox Alpha -> putStrLn "Alpha"
BlurbBox Beta -> putStrLn "Beta"
BlurbBox Ay -> putStrLn "Ay"
BlurbBox Bee -> putStrLn "Bee"
Este código se compila hasta principal, luego se queja sobre el tipo de BlurbBox Alfa. ¿Cómo hago para desempaquetar/desempaquetar un tipo existencial?
¿tiene un enlace para saber cómo y dónde ocurre esta traducción? BlurbBox (el constructor) tiene el tipo 'forall a. Blurb a => a -> BlurbBox 'pero el tipo en sí mismo (en general) es isomorfo a ...? – nicolas
que puede ayudar. https://mail.haskell.org/pipermail/haskell-cafe/2010-May/078254.html el ejercicio 23.4.8 de TAPL y el capítulo 24.3 son útiles también – nicolas