packages feed

HaXml-1.19: examples/GXL.hs

module GXL where

import Text.XML.HaXml.XmlContent
import Text.XML.HaXml.OneOfN


{-Type decls-}

data Gxl = Gxl Gxl_Attrs [Graph]
         deriving (Eq,Show)
data Gxl_Attrs = Gxl_Attrs
    { gxlXmlns'xlink :: (Defaultable String)
    } deriving (Eq,Show)
data Type = Type
    { typeXlink'type :: (Defaultable Type_xlink'type)
    , typeXlink'href :: String
    } deriving (Eq,Show)
data Type_xlink'type = Type_xlink'type_simple
                     deriving (Eq,Show)
data Graph = Graph Graph_Attrs (Maybe Type) [Attr]
                   [(OneOf3 Node Edge Rel)]
           deriving (Eq,Show)
data Graph_Attrs = Graph_Attrs
    { graphId :: String
    , graphRole :: (Maybe String)
    , graphEdgeids :: (Defaultable Graph_edgeids)
    , graphHypergraph :: (Defaultable Graph_hypergraph)
    , graphEdgemode :: (Defaultable Graph_edgemode)
    } deriving (Eq,Show)
data Graph_edgeids = Graph_edgeids_true  |  Graph_edgeids_false
                   deriving (Eq,Show)
data Graph_hypergraph = Graph_hypergraph_true  | 
                        Graph_hypergraph_false
                      deriving (Eq,Show)
data Graph_edgemode = Graph_edgemode_directed  | 
                      Graph_edgemode_undirected  |  Graph_edgemode_defaultdirected  | 
                      Graph_edgemode_defaultundirected
                    deriving (Eq,Show)
data Node = Node Node_Attrs (Maybe Type) [Attr] [Graph]
          deriving (Eq,Show)
data Node_Attrs = Node_Attrs
    { nodeId :: String
    } deriving (Eq,Show)
data Edge = Edge Edge_Attrs (Maybe Type) [Attr] [Graph]
          deriving (Eq,Show)
data Edge_Attrs = Edge_Attrs
    { edgeId :: (Maybe String)
    , edgeFrom :: String
    , edgeTo :: String
    , edgeFromorder :: (Maybe String)
    , edgeToorder :: (Maybe String)
    , edgeIsdirected :: (Maybe Edge_isdirected)
    } deriving (Eq,Show)
data Edge_isdirected = Edge_isdirected_true  | 
                       Edge_isdirected_false
                     deriving (Eq,Show)
data Rel = Rel Rel_Attrs (Maybe Type) [Attr] [Graph] [Relend]
         deriving (Eq,Show)
data Rel_Attrs = Rel_Attrs
    { relId :: (Maybe String)
    , relIsdirected :: (Maybe Rel_isdirected)
    } deriving (Eq,Show)
data Rel_isdirected = Rel_isdirected_true  |  Rel_isdirected_false
                    deriving (Eq,Show)
data Relend = Relend Relend_Attrs [Attr]
            deriving (Eq,Show)
data Relend_Attrs = Relend_Attrs
    { relendTarget :: String
    , relendRole :: (Maybe String)
    , relendDirection :: (Maybe Relend_direction)
    , relendStartorder :: (Maybe String)
    , relendEndorder :: (Maybe String)
    } deriving (Eq,Show)
data Relend_direction = Relend_direction_in  | 
                        Relend_direction_out  |  Relend_direction_none
                      deriving (Eq,Show)
data Attr = Attr Attr_Attrs [Attr]
                 (OneOf10 Locator Bool AInt AFloat AString Enum Seq Set Bag Tup)
          deriving (Eq,Show)
data Attr_Attrs = Attr_Attrs
    { attrId :: (Maybe String)
    , attrName :: String
    , attrKind :: (Maybe String)
    } deriving (Eq,Show)
data Locator = Locator
    { locatorXlink'type :: (Defaultable Locator_xlink'type)
    , locatorXlink'href :: String
    } deriving (Eq,Show)
data Locator_xlink'type = Locator_xlink'type_simple
                        deriving (Eq,Show)
newtype Bool = Bool String 		deriving (Eq,Show)
newtype AInt = AInt String 		deriving (Eq,Show)
newtype AFloat = AFloat String 		deriving (Eq,Show)
newtype AString = AString String 		deriving (Eq,Show)
newtype Enum = Enum String 		deriving (Eq,Show)
newtype Seq = Seq [Seq_] 		deriving (Eq,Show)
data Seq_ = Seq_Locator Locator
          | Seq_Bool Bool
          | Seq_AInt AInt
          | Seq_AFloat AFloat
          | Seq_AString AString
          | Seq_Enum Enum
          | Seq_Seq Seq
          | Seq_Set Set
          | Seq_Bag Bag
          | Seq_Tup Tup
          deriving (Eq,Show)
newtype Set = Set [Set_] 		deriving (Eq,Show)
data Set_ = Set_Locator Locator
          | Set_Bool Bool
          | Set_AInt AInt
          | Set_AFloat AFloat
          | Set_AString AString
          | Set_Enum Enum
          | Set_Seq Seq
          | Set_Set Set
          | Set_Bag Bag
          | Set_Tup Tup
          deriving (Eq,Show)
newtype Bag = Bag [Bag_] 		deriving (Eq,Show)
data Bag_ = Bag_Locator Locator
          | Bag_Bool Bool
          | Bag_AInt AInt
          | Bag_AFloat AFloat
          | Bag_AString AString
          | Bag_Enum Enum
          | Bag_Seq Seq
          | Bag_Set Set
          | Bag_Bag Bag
          | Bag_Tup Tup
          deriving (Eq,Show)
newtype Tup = Tup [Tup_] 		deriving (Eq,Show)
data Tup_ = Tup_Locator Locator
          | Tup_Bool Bool
          | Tup_AInt AInt
          | Tup_AFloat AFloat
          | Tup_AString AString
          | Tup_Enum Enum
          | Tup_Seq Seq
          | Tup_Set Set
          | Tup_Bag Bag
          | Tup_Tup Tup
          deriving (Eq,Show)


{-Instance decls-}

instance HTypeable Gxl where
    toHType x = Defined "gxl" [] []
instance XmlContent Gxl where
    toContents (Gxl as a) =
        [CElem (Elem "gxl" (toAttrs as) (concatMap toContents a)) ()]
    parseContents = do
        { e@(Elem _ as _) <- element ["gxl"]
        ; interior e $ return (Gxl (fromAttrs as))
                       `apply` many parseContents
        } `adjustErr` ("in <gxl>, "++)
instance XmlAttributes Gxl_Attrs where
    fromAttrs as =
        Gxl_Attrs
          { gxlXmlns'xlink = defaultA fromAttrToStr "http://www.w3.org/1999/xlink" "xmlns:xlink" as
          }
    toAttrs v = catMaybes 
        [ defaultToAttr toAttrFrStr "xmlns:xlink" (gxlXmlns'xlink v)
        ]

instance HTypeable Type where
    toHType x = Defined "type" [] []
instance XmlContent Type where
    toContents as =
        [CElem (Elem "type" (toAttrs as) []) ()]
    parseContents = do
        { (Elem _ as []) <- element ["type"]
        ; return (fromAttrs as)
        } `adjustErr` ("in <type>, "++)
instance XmlAttributes Type where
    fromAttrs as =
        Type
          { typeXlink'type = defaultA fromAttrToTyp Type_xlink'type_simple "xlink:type" as
          , typeXlink'href = definiteA fromAttrToStr "type" "xlink:href" as
          }
    toAttrs v = catMaybes 
        [ defaultToAttr toAttrFrTyp "xlink:type" (typeXlink'type v)
        , toAttrFrStr "xlink:href" (typeXlink'href v)
        ]

instance XmlAttrType Type_xlink'type where
    fromAttrToTyp n (n',v)
        | n==n'     = translate (attr2str v)
        | otherwise = Nothing
      where translate "simple" = Just Type_xlink'type_simple
            translate _ = Nothing
    toAttrFrTyp n Type_xlink'type_simple = Just (n, str2attr "simple")

instance HTypeable Graph where
    toHType x = Defined "graph" [] []
instance XmlContent Graph where
    toContents (Graph as a b c) =
        [CElem (Elem "graph" (toAttrs as) (maybe [] toContents a ++
                                           concatMap toContents b ++ concatMap toContents c)) ()]
    parseContents = do
        { e@(Elem _ as _) <- element ["graph"]
        ; interior e $ return (Graph (fromAttrs as))
                       `apply` optional parseContents `apply` many parseContents
                       `apply` many parseContents
        } `adjustErr` ("in <graph>, "++)
instance XmlAttributes Graph_Attrs where
    fromAttrs as =
        Graph_Attrs
          { graphId = definiteA fromAttrToStr "graph" "id" as
          , graphRole = possibleA fromAttrToStr "role" as
          , graphEdgeids = defaultA fromAttrToTyp Graph_edgeids_false "edgeids" as
          , graphHypergraph = defaultA fromAttrToTyp Graph_hypergraph_false "hypergraph" as
          , graphEdgemode = defaultA fromAttrToTyp Graph_edgemode_directed "edgemode" as
          }
    toAttrs v = catMaybes 
        [ toAttrFrStr "id" (graphId v)
        , maybeToAttr toAttrFrStr "role" (graphRole v)
        , defaultToAttr toAttrFrTyp "edgeids" (graphEdgeids v)
        , defaultToAttr toAttrFrTyp "hypergraph" (graphHypergraph v)
        , defaultToAttr toAttrFrTyp "edgemode" (graphEdgemode v)
        ]

instance XmlAttrType Graph_edgeids where
    fromAttrToTyp n (n',v)
        | n==n'     = translate (attr2str v)
        | otherwise = Nothing
      where translate "true" = Just Graph_edgeids_true
            translate "false" = Just Graph_edgeids_false
            translate _ = Nothing
    toAttrFrTyp n Graph_edgeids_true = Just (n, str2attr "true")
    toAttrFrTyp n Graph_edgeids_false = Just (n, str2attr "false")

instance XmlAttrType Graph_hypergraph where
    fromAttrToTyp n (n',v)
        | n==n'     = translate (attr2str v)
        | otherwise = Nothing
      where translate "true" = Just Graph_hypergraph_true
            translate "false" = Just Graph_hypergraph_false
            translate _ = Nothing
    toAttrFrTyp n Graph_hypergraph_true = Just (n, str2attr "true")
    toAttrFrTyp n Graph_hypergraph_false = Just (n, str2attr "false")

instance XmlAttrType Graph_edgemode where
    fromAttrToTyp n (n',v)
        | n==n'     = translate (attr2str v)
        | otherwise = Nothing
      where translate "directed" = Just Graph_edgemode_directed
            translate "undirected" = Just Graph_edgemode_undirected
            translate "defaultdirected" = Just Graph_edgemode_defaultdirected
            translate "defaultundirected" = Just Graph_edgemode_defaultundirected
            translate _ = Nothing
    toAttrFrTyp n Graph_edgemode_directed = Just (n, str2attr "directed")
    toAttrFrTyp n Graph_edgemode_undirected = Just (n, str2attr "undirected")
    toAttrFrTyp n Graph_edgemode_defaultdirected = Just (n, str2attr "defaultdirected")
    toAttrFrTyp n Graph_edgemode_defaultundirected = Just (n, str2attr "defaultundirected")

instance HTypeable Node where
    toHType x = Defined "node" [] []
instance XmlContent Node where
    toContents (Node as a b c) =
        [CElem (Elem "node" (toAttrs as) (maybe [] toContents a ++
                                          concatMap toContents b ++ concatMap toContents c)) ()]
    parseContents = do
        { e@(Elem _ as _) <- element ["node"]
        ; interior e $ return (Node (fromAttrs as))
                       `apply` optional parseContents `apply` many parseContents
                       `apply` many parseContents
        } `adjustErr` ("in <node>, "++)
instance XmlAttributes Node_Attrs where
    fromAttrs as =
        Node_Attrs
          { nodeId = definiteA fromAttrToStr "node" "id" as
          }
    toAttrs v = catMaybes 
        [ toAttrFrStr "id" (nodeId v)
        ]

instance HTypeable Edge where
    toHType x = Defined "edge" [] []
instance XmlContent Edge where
    toContents (Edge as a b c) =
        [CElem (Elem "edge" (toAttrs as) (maybe [] toContents a ++
                                          concatMap toContents b ++ concatMap toContents c)) ()]
    parseContents = do
        { e@(Elem _ as _) <- element ["edge"]
        ; interior e $ return (Edge (fromAttrs as))
                       `apply` optional parseContents `apply` many parseContents
                       `apply` many parseContents
        } `adjustErr` ("in <edge>, "++)
instance XmlAttributes Edge_Attrs where
    fromAttrs as =
        Edge_Attrs
          { edgeId = possibleA fromAttrToStr "id" as
          , edgeFrom = definiteA fromAttrToStr "edge" "from" as
          , edgeTo = definiteA fromAttrToStr "edge" "to" as
          , edgeFromorder = possibleA fromAttrToStr "fromorder" as
          , edgeToorder = possibleA fromAttrToStr "toorder" as
          , edgeIsdirected = possibleA fromAttrToTyp "isdirected" as
          }
    toAttrs v = catMaybes 
        [ maybeToAttr toAttrFrStr "id" (edgeId v)
        , toAttrFrStr "from" (edgeFrom v)
        , toAttrFrStr "to" (edgeTo v)
        , maybeToAttr toAttrFrStr "fromorder" (edgeFromorder v)
        , maybeToAttr toAttrFrStr "toorder" (edgeToorder v)
        , maybeToAttr toAttrFrTyp "isdirected" (edgeIsdirected v)
        ]

instance XmlAttrType Edge_isdirected where
    fromAttrToTyp n (n',v)
        | n==n'     = translate (attr2str v)
        | otherwise = Nothing
      where translate "true" = Just Edge_isdirected_true
            translate "false" = Just Edge_isdirected_false
            translate _ = Nothing
    toAttrFrTyp n Edge_isdirected_true = Just (n, str2attr "true")
    toAttrFrTyp n Edge_isdirected_false = Just (n, str2attr "false")

instance HTypeable Rel where
    toHType x = Defined "rel" [] []
instance XmlContent Rel where
    toContents (Rel as a b c d) =
        [CElem (Elem "rel" (toAttrs as) (maybe [] toContents a ++
                                         concatMap toContents b ++ concatMap toContents c ++
                                         concatMap toContents d)) ()]
    parseContents = do
        { e@(Elem _ as _) <- element ["rel"]
        ; interior e $ return (Rel (fromAttrs as))
                       `apply` optional parseContents `apply` many parseContents
                       `apply` many parseContents `apply` many parseContents
        } `adjustErr` ("in <rel>, "++)
instance XmlAttributes Rel_Attrs where
    fromAttrs as =
        Rel_Attrs
          { relId = possibleA fromAttrToStr "id" as
          , relIsdirected = possibleA fromAttrToTyp "isdirected" as
          }
    toAttrs v = catMaybes 
        [ maybeToAttr toAttrFrStr "id" (relId v)
        , maybeToAttr toAttrFrTyp "isdirected" (relIsdirected v)
        ]

instance XmlAttrType Rel_isdirected where
    fromAttrToTyp n (n',v)
        | n==n'     = translate (attr2str v)
        | otherwise = Nothing
      where translate "true" = Just Rel_isdirected_true
            translate "false" = Just Rel_isdirected_false
            translate _ = Nothing
    toAttrFrTyp n Rel_isdirected_true = Just (n, str2attr "true")
    toAttrFrTyp n Rel_isdirected_false = Just (n, str2attr "false")

instance HTypeable Relend where
    toHType x = Defined "relend" [] []
instance XmlContent Relend where
    toContents (Relend as a) =
        [CElem (Elem "relend" (toAttrs as) (concatMap toContents a)) ()]
    parseContents = do
        { e@(Elem _ as _) <- element ["relend"]
        ; interior e $ return (Relend (fromAttrs as))
                       `apply` many parseContents
        } `adjustErr` ("in <relend>, "++)
instance XmlAttributes Relend_Attrs where
    fromAttrs as =
        Relend_Attrs
          { relendTarget = definiteA fromAttrToStr "relend" "target" as
          , relendRole = possibleA fromAttrToStr "role" as
          , relendDirection = possibleA fromAttrToTyp "direction" as
          , relendStartorder = possibleA fromAttrToStr "startorder" as
          , relendEndorder = possibleA fromAttrToStr "endorder" as
          }
    toAttrs v = catMaybes 
        [ toAttrFrStr "target" (relendTarget v)
        , maybeToAttr toAttrFrStr "role" (relendRole v)
        , maybeToAttr toAttrFrTyp "direction" (relendDirection v)
        , maybeToAttr toAttrFrStr "startorder" (relendStartorder v)
        , maybeToAttr toAttrFrStr "endorder" (relendEndorder v)
        ]

instance XmlAttrType Relend_direction where
    fromAttrToTyp n (n',v)
        | n==n'     = translate (attr2str v)
        | otherwise = Nothing
      where translate "in" = Just Relend_direction_in
            translate "out" = Just Relend_direction_out
            translate "none" = Just Relend_direction_none
            translate _ = Nothing
    toAttrFrTyp n Relend_direction_in = Just (n, str2attr "in")
    toAttrFrTyp n Relend_direction_out = Just (n, str2attr "out")
    toAttrFrTyp n Relend_direction_none = Just (n, str2attr "none")

instance HTypeable Attr where
    toHType x = Defined "attr" [] []
instance XmlContent Attr where
    toContents (Attr as a b) =
        [CElem (Elem "attr" (toAttrs as) (concatMap toContents a ++
                                          toContents b)) ()]
    parseContents = do
        { e@(Elem _ as _) <- element ["attr"]
        ; interior e $ return (Attr (fromAttrs as))
                       `apply` many parseContents `apply` parseContents
        } `adjustErr` ("in <attr>, "++)
instance XmlAttributes Attr_Attrs where
    fromAttrs as =
        Attr_Attrs
          { attrId = possibleA fromAttrToStr "id" as
          , attrName = definiteA fromAttrToStr "attr" "name" as
          , attrKind = possibleA fromAttrToStr "kind" as
          }
    toAttrs v = catMaybes 
        [ maybeToAttr toAttrFrStr "id" (attrId v)
        , toAttrFrStr "name" (attrName v)
        , maybeToAttr toAttrFrStr "kind" (attrKind v)
        ]

instance HTypeable Locator where
    toHType x = Defined "locator" [] []
instance XmlContent Locator where
    toContents as =
        [CElem (Elem "locator" (toAttrs as) []) ()]
    parseContents = do
        { (Elem _ as []) <- element ["locator"]
        ; return (fromAttrs as)
        } `adjustErr` ("in <locator>, "++)
instance XmlAttributes Locator where
    fromAttrs as =
        Locator
          { locatorXlink'type = defaultA fromAttrToTyp Locator_xlink'type_simple "xlink:type" as
          , locatorXlink'href = definiteA fromAttrToStr "locator" "xlink:href" as
          }
    toAttrs v = catMaybes 
        [ defaultToAttr toAttrFrTyp "xlink:type" (locatorXlink'type v)
        , toAttrFrStr "xlink:href" (locatorXlink'href v)
        ]

instance XmlAttrType Locator_xlink'type where
    fromAttrToTyp n (n',v)
        | n==n'     = translate (attr2str v)
        | otherwise = Nothing
      where translate "simple" = Just Locator_xlink'type_simple
            translate _ = Nothing
    toAttrFrTyp n Locator_xlink'type_simple = Just (n, str2attr "simple")

instance HTypeable Bool where
    toHType x = Defined "bool" [] []
instance XmlContent Bool where
    toContents (Bool a) =
        [CElem (Elem "bool" [] (toText a)) ()]
    parseContents = do
        { e@(Elem _ [] _) <- element ["bool"]
        ; interior e $ return (Bool) `apply` (text `onFail` return "")
        } `adjustErr` ("in <bool>, "++)

instance HTypeable AInt where
    toHType x = Defined "int" [] []
instance XmlContent AInt where
    toContents (AInt a) =
        [CElem (Elem "int" [] (toText a)) ()]
    parseContents = do
        { e@(Elem _ [] _) <- element ["int"]
        ; interior e $ return (AInt) `apply` (text `onFail` return "")
        } `adjustErr` ("in <int>, "++)

instance HTypeable AFloat where
    toHType x = Defined "float" [] []
instance XmlContent AFloat where
    toContents (AFloat a) =
        [CElem (Elem "float" [] (toText a)) ()]
    parseContents = do
        { e@(Elem _ [] _) <- element ["float"]
        ; interior e $ return (AFloat) `apply` (text `onFail` return "")
        } `adjustErr` ("in <float>, "++)

instance HTypeable AString where
    toHType x = Defined "string" [] []
instance XmlContent AString where
    toContents (AString a) =
        [CElem (Elem "string" [] (toText a)) ()]
    parseContents = do
        { e@(Elem _ [] _) <- element ["string"]
        ; interior e $ return (AString) `apply` (text `onFail` return "")
        } `adjustErr` ("in <string>, "++)

instance HTypeable Enum where
    toHType x = Defined "enum" [] []
instance XmlContent Enum where
    toContents (Enum a) =
        [CElem (Elem "enum" [] (toText a)) ()]
    parseContents = do
        { e@(Elem _ [] _) <- element ["enum"]
        ; interior e $ return (Enum) `apply` (text `onFail` return "")
        } `adjustErr` ("in <enum>, "++)

instance HTypeable Seq where
    toHType x = Defined "seq" [] []
instance XmlContent Seq where
    toContents (Seq a) =
        [CElem (Elem "seq" [] (concatMap toContents a)) ()]
    parseContents = do
        { e@(Elem _ [] _) <- element ["seq"]
        ; interior e $ return (Seq) `apply` many parseContents
        } `adjustErr` ("in <seq>, "++)

instance HTypeable Seq_ where
    toHType x = Defined "seq" [] []
instance XmlContent Seq_ where
    toContents (Seq_Locator a) = toContents a
    toContents (Seq_Bool a) = toContents a
    toContents (Seq_AInt a) = toContents a
    toContents (Seq_AFloat a) = toContents a
    toContents (Seq_AString a) = toContents a
    toContents (Seq_Enum a) = toContents a
    toContents (Seq_Seq a) = toContents a
    toContents (Seq_Set a) = toContents a
    toContents (Seq_Bag a) = toContents a
    toContents (Seq_Tup a) = toContents a
    parseContents = oneOf
        [ return (Seq_Locator) `apply` parseContents
        , return (Seq_Bool) `apply` parseContents
        , return (Seq_AInt) `apply` parseContents
        , return (Seq_AFloat) `apply` parseContents
        , return (Seq_AString) `apply` parseContents
        , return (Seq_Enum) `apply` parseContents
        , return (Seq_Seq) `apply` parseContents
        , return (Seq_Set) `apply` parseContents
        , return (Seq_Bag) `apply` parseContents
        , return (Seq_Tup) `apply` parseContents
        ] `adjustErr` ("in <seq>, "++)

instance HTypeable Set where
    toHType x = Defined "set" [] []
instance XmlContent Set where
    toContents (Set a) =
        [CElem (Elem "set" [] (concatMap toContents a)) ()]
    parseContents = do
        { e@(Elem _ [] _) <- element ["set"]
        ; interior e $ return (Set) `apply` many parseContents
        } `adjustErr` ("in <set>, "++)

instance HTypeable Set_ where
    toHType x = Defined "set" [] []
instance XmlContent Set_ where
    toContents (Set_Locator a) = toContents a
    toContents (Set_Bool a) = toContents a
    toContents (Set_AInt a) = toContents a
    toContents (Set_AFloat a) = toContents a
    toContents (Set_AString a) = toContents a
    toContents (Set_Enum a) = toContents a
    toContents (Set_Seq a) = toContents a
    toContents (Set_Set a) = toContents a
    toContents (Set_Bag a) = toContents a
    toContents (Set_Tup a) = toContents a
    parseContents = oneOf
        [ return (Set_Locator) `apply` parseContents
        , return (Set_Bool) `apply` parseContents
        , return (Set_AInt) `apply` parseContents
        , return (Set_AFloat) `apply` parseContents
        , return (Set_AString) `apply` parseContents
        , return (Set_Enum) `apply` parseContents
        , return (Set_Seq) `apply` parseContents
        , return (Set_Set) `apply` parseContents
        , return (Set_Bag) `apply` parseContents
        , return (Set_Tup) `apply` parseContents
        ] `adjustErr` ("in <set>, "++)

instance HTypeable Bag where
    toHType x = Defined "bag" [] []
instance XmlContent Bag where
    toContents (Bag a) =
        [CElem (Elem "bag" [] (concatMap toContents a)) ()]
    parseContents = do
        { e@(Elem _ [] _) <- element ["bag"]
        ; interior e $ return (Bag) `apply` many parseContents
        } `adjustErr` ("in <bag>, "++)

instance HTypeable Bag_ where
    toHType x = Defined "bag" [] []
instance XmlContent Bag_ where
    toContents (Bag_Locator a) = toContents a
    toContents (Bag_Bool a) = toContents a
    toContents (Bag_AInt a) = toContents a
    toContents (Bag_AFloat a) = toContents a
    toContents (Bag_AString a) = toContents a
    toContents (Bag_Enum a) = toContents a
    toContents (Bag_Seq a) = toContents a
    toContents (Bag_Set a) = toContents a
    toContents (Bag_Bag a) = toContents a
    toContents (Bag_Tup a) = toContents a
    parseContents = oneOf
        [ return (Bag_Locator) `apply` parseContents
        , return (Bag_Bool) `apply` parseContents
        , return (Bag_AInt) `apply` parseContents
        , return (Bag_AFloat) `apply` parseContents
        , return (Bag_AString) `apply` parseContents
        , return (Bag_Enum) `apply` parseContents
        , return (Bag_Seq) `apply` parseContents
        , return (Bag_Set) `apply` parseContents
        , return (Bag_Bag) `apply` parseContents
        , return (Bag_Tup) `apply` parseContents
        ] `adjustErr` ("in <bag>, "++)

instance HTypeable Tup where
    toHType x = Defined "tup" [] []
instance XmlContent Tup where
    toContents (Tup a) =
        [CElem (Elem "tup" [] (concatMap toContents a)) ()]
    parseContents = do
        { e@(Elem _ [] _) <- element ["tup"]
        ; interior e $ return (Tup) `apply` many parseContents
        } `adjustErr` ("in <tup>, "++)

instance HTypeable Tup_ where
    toHType x = Defined "tup" [] []
instance XmlContent Tup_ where
    toContents (Tup_Locator a) = toContents a
    toContents (Tup_Bool a) = toContents a
    toContents (Tup_AInt a) = toContents a
    toContents (Tup_AFloat a) = toContents a
    toContents (Tup_AString a) = toContents a
    toContents (Tup_Enum a) = toContents a
    toContents (Tup_Seq a) = toContents a
    toContents (Tup_Set a) = toContents a
    toContents (Tup_Bag a) = toContents a
    toContents (Tup_Tup a) = toContents a
    parseContents = oneOf
        [ return (Tup_Locator) `apply` parseContents
        , return (Tup_Bool) `apply` parseContents
        , return (Tup_AInt) `apply` parseContents
        , return (Tup_AFloat) `apply` parseContents
        , return (Tup_AString) `apply` parseContents
        , return (Tup_Enum) `apply` parseContents
        , return (Tup_Seq) `apply` parseContents
        , return (Tup_Set) `apply` parseContents
        , return (Tup_Bag) `apply` parseContents
        , return (Tup_Tup) `apply` parseContents
        ] `adjustErr` ("in <tup>, "++)



{-Done-}