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:
- Ist es möglich, Existenziale mit Schrott Ihre Boilerplate zu kombinieren?
- Wenn ja: Wie implementieren Sie Gunfold für einen existentiellen Datentyp?
+1: http://www.mail-archive.com/[email protected]/msg75780.html –
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