2010-05-15 8 views
8

Ich schreibe einen XML (de) Serializer mit Text.XML.Light und Scrap Ihre Boilerplate (um http://github.com/finnsson/Text.XML.Generic) und bis jetzt habe ich Arbeitscode für "normale" ADTs, aber ich bin bei fest Deserialisierung von Existenzen.Existentials und Scrap your Boilerplate

bekam ich den existenziellen Datentyp

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

und ich versuche diese

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 

aber ich kann nicht herausfinden, zu kompilieren, zu bekommen, wie gunfold für DataBox zu implementieren.

Die Fehlermeldung ist

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) 

Es beschweren sich über den Datentyp nicht von b, um herauszufinden, in der Lage.

Ich versuche auch zu implementieren dataCast1 und dataCast2 aber ich denke, ich kann ohne sie leben (d. H. Eine falsche Implementierung).

ich meine Fragen erraten sind:

  1. Ist es möglich, Existenziale mit Schrott Ihre Boilerplate zu kombinieren?
  2. Wenn ja: Wie implementieren Sie Gunfold für einen existentiellen Datentyp?

Antwort

6

Ist es möglich, GADTs mit Scrap your Boilerplate zu kombinieren?

Ich denke, Sie müssen Haskell-Cafe @ fragen. Dies ist möglicherweise eine Forschungsfrage.

+0

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

+0

Danke für den Tipp. Meine derzeitige Wette ist, dass José Pedro Magalhães Recht hatte, d. H. Die Antwort auf (1) ist "Nein". – finnsson

Verwandte Themen