2010-05-15 16 views
8

Sto scrivendo un serializzatore XML (de) utilizzando Text.XML.Light e Scrap your Boilerplate (a http://github.com/finnsson/Text.XML.Generic) e fino ad ora ho ottenuto codice funzionante per ADT "normali" ma sono bloccato a deserializzazione degli esistenziali.Existentials and Scrap your Boilerplate

ho avuto il tipo di dati esistenziale

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

e sto cercando di ottenere questo per compilare

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 

ma non riesco a capire come implementare gunfold per DataBox.

Il messaggio di errore è

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) 

Si lamentano di non essere in grado di capire il tipo di dati di b.

Sto anche provando a implementare dataCast1 e dataCast2 ma penso di poter vivere senza di loro (cioè un'implementazione errata).

Credo che le mie domande sono:

  1. E 'possibile combinare esistenziali con scarto tua Boilerplate?
  2. In caso affermativo: come si implementa l'elica per un tipo di dati esistenziali?

risposta

6

È possibile combinare GADT con Scrap your Boilerplate?

Penso che dovrai chiedere haskell-cafe @. Questa è probabilmente una domanda di ricerca.

+0

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

+0

Grazie per il suggerimento. La mia scommessa attuale è che José Pedro Magalhães aveva ragione, cioè la risposta a (1) è "no". – finnsson

Problemi correlati