Thử nghiệm với các loại hiện có. Có vẻ là một cách tuyệt vời để có được một số loại linh hoạt.Làm thế nào để giải nén một loại tồn tại haskell?
Tôi đang gặp sự cố với việc unboxing một loại tồn tại sau khi tôi đã gói nó lên. Mã của tôi như sau:
{-# 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"
Mã này biên dịch chính, sau đó khiếu nại về loại BlurbBox Alpha. Làm thế nào để tôi đi về unboxing/giải nén một loại tồn tại?
bạn có liên kết về cách thức/nơi bản dịch này xảy ra không? BlurbBox (hàm tạo) có kiểu 'forall a. Blurb a => a -> BlurbBox 'nhưng bản thân loại (nói chung) là đẳng cấu với ..? – nicolas
có thể trợ giúp. https://mail.haskell.org/pipermail/haskell-cafe/2010-May/078254.html bài tập 23.4.8 của TAPL và chương 24.3 cũng hữu ích – nicolas