2010-05-15 21 views
8

Text.XML.Light ve Boilerplate'i (http://github.com/finnsson/Text.XML.Generic numaralı telefondan) kullanarak bir XML (de) serializer yazıyorum ve şu ana kadar "normal" ADT'ler için çalışma kodunu aldım ama varoluşların serileştirilmesi. Varolan işler ve Kazan kasanı

ben varoluşsal veri türü

data DataBox where 
    DataBox :: (Show d, Eq d, Data d) => d -> DataBox 

var ve bu

instance Data DataBox where 
    gfoldl k z (DataBox d) = z DataBox `k` d 
    gunfold k z c = k (z DataBox) -- not OK 
    toConstr (DataBox d) = toConstr d 
    dataTypeOf (DataBox d) = dataTypeOf d 

derlemek almaya çalışıyorum ama DataBox için gunfold nasıl uygulanacağı bilemiyorum.

hata mesajı Bu b veri türünü anlamaya mümkün değil varlık hakkında şikayetçi

Text/XML/Generic.hs:274:23: 
    Ambiguous type variable `b' in the constraints: 
     `Eq b' 
     arising from a use of `DataBox' at Text/XML/Generic.hs:274:23-29 
     `Show b' 
     arising from a use of `DataBox' at Text/XML/Generic.hs:274:23-29 
     `Data b' arising from a use of `k' at Text/XML/Generic.hs:274:18-30 
    Probable fix: add a type signature that fixes these type variable(s) 

olduğunu.

Ayrıca dataCast1 ve dataCast2 uygulamak için çalışıyorum ama sanırım onlar olmadan yaşayabiliyorum (yani yanlış bir uygulama).

Ben sorularımı tahmin

şunlardır:

  1. sizin Demirbaş Hurda ile existentials birleştirmek mümkün mü?
  2. Eğer öyleyse: varoluşsal veri türü için silah katını nasıl uygularsınız?

cevap

6

sizin Demirbaş Hurda ile GADTs birleştirmek mümkün mü?

Sanırım haskell-cafe @ 'e sormanız gerekecek. Bu muhtemelen bir araştırma sorusu.

+0

+1: http://www.mail-archive.com/[email protected]/msg75780.html –

+0

Bahşiş için teşekkürler. Şu anki bahisim José Pedro Magalhães'in haklı olduğu, yani (1) 'in cevabının "hayır" olduğu. – finnsson

İlgili konular