-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | Basic types for representing XML
--   
--   Basic types for representing XML
@package xml-types
@version 0.3.6


-- | Basic types for representing XML.
--   
--   The idea is to have a full set of appropriate types, which various XML
--   libraries can share. Instead of having equivalent-but-incompatible
--   types for every binding, parser, or client, they all share the same
--   types can can thus interoperate easily.
--   
--   This library contains complete types for most parts of an XML
--   document, including the prologue, node tree, and doctype. Some basic
--   combinators are included for common tasks, including traversing the
--   node tree and filtering children.
module Data.XML.Types
data Document
Document :: Prologue -> Element -> [Miscellaneous] -> Document
[documentPrologue] :: Document -> Prologue
[documentRoot] :: Document -> Element
[documentEpilogue] :: Document -> [Miscellaneous]
data Prologue
Prologue :: [Miscellaneous] -> Maybe Doctype -> [Miscellaneous] -> Prologue
[prologueBefore] :: Prologue -> [Miscellaneous]
[prologueDoctype] :: Prologue -> Maybe Doctype
[prologueAfter] :: Prologue -> [Miscellaneous]
data Instruction
Instruction :: Text -> Text -> Instruction
[instructionTarget] :: Instruction -> Text
[instructionData] :: Instruction -> Text
data Miscellaneous
MiscInstruction :: Instruction -> Miscellaneous
MiscComment :: Text -> Miscellaneous
data Node
NodeElement :: Element -> Node
NodeInstruction :: Instruction -> Node
NodeContent :: Content -> Node
NodeComment :: Text -> Node
data Element
Element :: Name -> [(Name, [Content])] -> [Node] -> Element
[elementName] :: Element -> Name
[elementAttributes] :: Element -> [(Name, [Content])]
[elementNodes] :: Element -> [Node]
data Content
ContentText :: Text -> Content

-- | For pass-through parsing
ContentEntity :: Text -> Content

-- | A fully qualified name.
--   
--   Prefixes are not semantically important; they are included only to
--   simplify pass-through parsing. When comparing names with <a>Eq</a> or
--   <a>Ord</a> methods, prefixes are ignored.
--   
--   The <tt>IsString</tt> instance supports Clark notation; see
--   <a>http://www.jclark.com/xml/xmlns.htm</a> and
--   <a>http://infohost.nmt.edu/tcc/help/pubs/pylxml/etree-QName.html</a>.
--   Use the <tt>OverloadedStrings</tt> language extension for very simple
--   <tt>Name</tt> construction:
--   
--   <pre>
--   myname :: Name
--   myname = "{http://example.com/ns/my-namespace}my-name"
--   </pre>
data Name
Name :: Text -> Maybe Text -> Maybe Text -> Name
[nameLocalName] :: Name -> Text
[nameNamespace] :: Name -> Maybe Text
[namePrefix] :: Name -> Maybe Text

-- | Note: due to the incredible complexity of DTDs, this type only
--   supports external subsets. I've tried adding internal subset types,
--   but they quickly gain more code than the rest of this module put
--   together.
--   
--   It is possible that some future version of this library might support
--   internal subsets, but I am no longer actively working on adding them.
data Doctype
Doctype :: Text -> Maybe ExternalID -> Doctype
[doctypeName] :: Doctype -> Text
[doctypeID] :: Doctype -> Maybe ExternalID
data ExternalID
SystemID :: Text -> ExternalID
PublicID :: Text -> Text -> ExternalID

-- | Some XML processing tools are incremental, and work in terms of events
--   rather than node trees. The <a>Event</a> type allows a document to be
--   fully specified as a sequence of events.
--   
--   Event-based XML libraries include:
--   
--   <ul>
--   <li><a>http://hackage.haskell.org/package/xml-enumerator</a></li>
--   <li><a>http://hackage.haskell.org/package/libxml-enumerator</a></li>
--   <li><a>http://hackage.haskell.org/package/expat-enumerator</a></li>
--   </ul>
data Event
EventBeginDocument :: Event
EventEndDocument :: Event
EventBeginDoctype :: Text -> (Maybe ExternalID) -> Event
EventEndDoctype :: Event
EventInstruction :: Instruction -> Event
EventBeginElement :: Name -> [(Name, [Content])] -> Event
EventEndElement :: Name -> Event
EventContent :: Content -> Event
EventComment :: Text -> Event
EventCDATA :: Text -> Event
isElement :: Node -> [Element]
isInstruction :: Node -> [Instruction]
isContent :: Node -> [Content]
isComment :: Node -> [Text]
isNamed :: Name -> Element -> [Element]
elementChildren :: Element -> [Element]
elementContent :: Element -> [Content]
elementText :: Element -> [Text]
nodeChildren :: Node -> [Node]
nodeContent :: Node -> [Content]
nodeText :: Node -> [Text]
hasAttribute :: Name -> Element -> [Element]
hasAttributeText :: Name -> (Text -> Bool) -> Element -> [Element]
attributeContent :: Name -> Element -> Maybe [Content]
attributeText :: Name -> Element -> Maybe Text
instance GHC.Show.Show Data.XML.Types.Event
instance GHC.Classes.Ord Data.XML.Types.Event
instance GHC.Classes.Eq Data.XML.Types.Event
instance Data.Data.Data Data.XML.Types.Event
instance GHC.Show.Show Data.XML.Types.Document
instance GHC.Classes.Ord Data.XML.Types.Document
instance GHC.Classes.Eq Data.XML.Types.Document
instance Data.Data.Data Data.XML.Types.Document
instance GHC.Show.Show Data.XML.Types.Prologue
instance GHC.Classes.Ord Data.XML.Types.Prologue
instance GHC.Classes.Eq Data.XML.Types.Prologue
instance Data.Data.Data Data.XML.Types.Prologue
instance GHC.Show.Show Data.XML.Types.Doctype
instance GHC.Classes.Ord Data.XML.Types.Doctype
instance GHC.Classes.Eq Data.XML.Types.Doctype
instance Data.Data.Data Data.XML.Types.Doctype
instance GHC.Show.Show Data.XML.Types.ExternalID
instance GHC.Classes.Ord Data.XML.Types.ExternalID
instance GHC.Classes.Eq Data.XML.Types.ExternalID
instance Data.Data.Data Data.XML.Types.ExternalID
instance GHC.Show.Show Data.XML.Types.Node
instance GHC.Classes.Ord Data.XML.Types.Node
instance GHC.Classes.Eq Data.XML.Types.Node
instance Data.Data.Data Data.XML.Types.Node
instance GHC.Show.Show Data.XML.Types.Element
instance GHC.Classes.Ord Data.XML.Types.Element
instance GHC.Classes.Eq Data.XML.Types.Element
instance Data.Data.Data Data.XML.Types.Element
instance GHC.Show.Show Data.XML.Types.Name
instance Data.Data.Data Data.XML.Types.Name
instance GHC.Show.Show Data.XML.Types.Content
instance GHC.Classes.Ord Data.XML.Types.Content
instance GHC.Classes.Eq Data.XML.Types.Content
instance Data.Data.Data Data.XML.Types.Content
instance GHC.Show.Show Data.XML.Types.Miscellaneous
instance GHC.Classes.Ord Data.XML.Types.Miscellaneous
instance GHC.Classes.Eq Data.XML.Types.Miscellaneous
instance Data.Data.Data Data.XML.Types.Miscellaneous
instance GHC.Show.Show Data.XML.Types.Instruction
instance GHC.Classes.Ord Data.XML.Types.Instruction
instance GHC.Classes.Eq Data.XML.Types.Instruction
instance Data.Data.Data Data.XML.Types.Instruction
instance GHC.Generics.Generic Data.XML.Types.Document
instance GHC.Generics.Generic Data.XML.Types.Prologue
instance GHC.Generics.Generic Data.XML.Types.Instruction
instance GHC.Generics.Generic Data.XML.Types.Miscellaneous
instance GHC.Generics.Generic Data.XML.Types.Node
instance GHC.Generics.Generic Data.XML.Types.Element
instance GHC.Generics.Generic Data.XML.Types.Content
instance GHC.Generics.Generic Data.XML.Types.Name
instance GHC.Generics.Generic Data.XML.Types.Doctype
instance GHC.Generics.Generic Data.XML.Types.ExternalID
instance GHC.Generics.Generic Data.XML.Types.Event
instance Control.DeepSeq.NFData Data.XML.Types.Document
instance Control.DeepSeq.NFData Data.XML.Types.Prologue
instance Control.DeepSeq.NFData Data.XML.Types.Instruction
instance Control.DeepSeq.NFData Data.XML.Types.Miscellaneous
instance Control.DeepSeq.NFData Data.XML.Types.Node
instance Control.DeepSeq.NFData Data.XML.Types.Element
instance Control.DeepSeq.NFData Data.XML.Types.Content
instance GHC.Classes.Eq Data.XML.Types.Name
instance GHC.Classes.Ord Data.XML.Types.Name
instance Data.String.IsString Data.XML.Types.Name
instance Control.DeepSeq.NFData Data.XML.Types.Name
instance Control.DeepSeq.NFData Data.XML.Types.Doctype
instance Control.DeepSeq.NFData Data.XML.Types.ExternalID
instance Control.DeepSeq.NFData Data.XML.Types.Event
