data XML = Text String | Elem Name [Attr] [XML]
type Name = String
type Attr = (String,String)

instance Show XML where
  show (Text s) = s
  show (Elem name attrs childs)
    = '<' : name ++ concatMap showAttr attrs ++ ">" ++
      concatMap show childs ++ 
      "</" ++ name ++ ">"
   where
    showAttr (n,v) = ' ' : n ++ "=\"" ++ v ++ "\""

{-
<person sex="male" birth="21.03.1685">
  <name last="Bach" first="Johann Sebastian" />
</person>
-}
beispiel1
 = Elem "person" [("sex","male"),("birth","21.03.1685")]
    [Elem "name" [("last","Bach"),("first","Johann Sebastian")] []]

{-
<branch>
  <leaf value="1" />2<leaf value="3" />
</branch>
-}
beispiel2
 = Elem "branch" []
    [Elem "leaf" [("value","1")] []
    ,Text "2"
    ,Elem "leaf" [("value","3")] []]
