We do not define a tag data type here, since this is too much bound to the particular use (e.g. list or tree structure). However we define a tag name and several
- newtype Name ident = Name {
- unname :: ident
- doctype :: Tag name => Name name
- doctypeString :: String
- cdata :: Tag name => Name name
- cdataString :: String
- isEmpty :: (Tag name, Ord name) => Name name -> Bool
- isSloppy :: (Tag name, Ord name) => Name name -> Bool
- isInnerOf :: (Tag name, Ord name) => Name name -> Name name -> Bool
- closes :: (Tag name, Ord name) => Name name -> Name name -> Bool