Экспериментирование с экзистенциальными типами. Кажется, это отличный способ получить гибкость в типе.
У меня проблема с распаковкой экзистенциального типа после того, как я его завернул. Мой код выглядит следующим образом:
{-# 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"
Этот код компилируется до основного, затем жалуется на тип BlurbBox Alpha. Как перейти к распаковке/распаковке экзистенциального типа?