{-# LANGUAGE DeriveDataTypeable, FlexibleInstances #-} module ToXml where import Data.Typeable(Typeable) import Data.Data(Data, showConstr, toConstr, gmapQ) -- import qualified Text.XML.Expat.Tree as XML -- Cheap drop-in replacement: data XMLNode tag text = XMLElement tag [(tag, text)] [XMLNode tag text] instance Show (XMLNode String a) where show (XMLElement t _ cs) = "<"++ t++ ">"++ concatMap show cs ++ "" toXml :: (Data a)=> a-> XMLNode String String toXml a = XMLElement (showConstr (toConstr a)) [] (gmapQ toXml a) data Gubbins = Ho | Hi Int Gubbins deriving (Typeable, Data) -- Das geht nicht: {- data X = X (Int-> String) deriving (Typeable, Data) -}