Type classes to allow for XML handling functions to be generalized to work with different node types, including the ones defined in Tree and Annotated.
- type Attributes tag text = [(tag, text)]
- type UAttributes text = Attributes text text
- textContent :: (NodeClass n [], Monoid text) => n [] tag text -> text
- type family ListOf n
- class (Functor c, List c) => NodeClass n c where
- isElement :: n c tag text -> Bool
- isText :: n c tag text -> Bool
- isCData :: n c tag text -> Bool
- isProcessingInstruction :: n c tag text -> Bool
- isComment :: n c tag text -> Bool
- textContentM :: Monoid text => n c tag text -> ItemM c text
- isNamed :: Eq tag => tag -> n c tag text -> Bool
- getName :: Monoid tag => n c tag text -> tag
- hasTarget :: Eq text => text -> n c tag text -> Bool
- getTarget :: Monoid text => n c tag text -> text
- getAttributes :: n c tag text -> [(tag, text)]
- getChildren :: n c tag text -> c (n c tag text)
- getText :: Monoid text => n c tag text -> text
- modifyName :: (tag -> tag) -> n c tag text -> n c tag text
- modifyAttributes :: ([(tag, text)] -> [(tag, text)]) -> n c tag text -> n c tag text
- modifyChildren :: (c (n c tag text) -> c (n c tag text)) -> n c tag text -> n c tag text
- modifyElement :: ((tag, [(tag, text)], c (n c tag text)) -> (tag', [(tag', text)], c (n c tag' text))) -> n c tag text -> n c tag' text
- mapAllTags :: (tag -> tag') -> n c tag text -> n c tag' text
- mapNodeContainer :: List c' => (forall a. c a -> ItemM c (c' a)) -> n c tag text -> ItemM c (n c' tag text)
- mkText :: text -> n c tag text
- mapElement :: NodeClass n c => ((tag, [(tag, text)], c (n c tag text)) -> (tag', [(tag', text)], c (n c tag' text))) -> n c tag text -> n c tag' text
- mapNodeListContainer :: (NodeClass n c, List c') => (forall a. c a -> ItemM c (c' a)) -> c (n c tag text) -> ItemM c (c' (n c' tag text))
- fromNodeContainer :: (NodeClass n c, List c') => n c tag text -> ItemM c (n c' tag text)
- fromNodeListContainer :: (NodeClass n c, List c') => c (n c tag text) -> ItemM c (c' (n c' tag text))
- class NodeClass n c => MkElementClass n c where
- mkElement :: tag -> Attributes tag text -> c (n c tag text) -> n c tag text
- getAttribute :: (NodeClass n c, GenericXMLString tag) => n c tag text -> tag -> Maybe text
- setAttribute :: (Eq tag, NodeClass n c, GenericXMLString tag) => tag -> text -> n c tag text -> n c tag text
- deleteAttribute :: (Eq tag, NodeClass n c, GenericXMLString tag) => tag -> n c tag text -> n c tag text
- alterAttribute :: (Eq tag, NodeClass n c, GenericXMLString tag) => tag -> Maybe text -> n c tag text -> n c tag text
- fromElement :: (NodeClass n c, MkElementClass n' c, Monoid tag, Monoid text) => n c tag text -> n' c tag text
- fromElement_ :: (NodeClass n c, NodeClass n' c, Monoid tag, Monoid text) => (tag -> Attributes tag text -> c (n' c tag text) -> n' c tag text) -> n c tag text -> n' c tag text
- fromNodes :: (NodeClass n c, MkElementClass n' c, Monoid tag, Monoid text) => c (n c tag text) -> c (n' c tag text)
- fromNodes_ :: (NodeClass n c, NodeClass n' c, Monoid tag, Monoid text) => (tag -> Attributes tag text -> c (n' c tag text) -> n' c tag text) -> c (n c tag text) -> c (n' c tag text)
Documentation
type Attributes tag text = [(tag, text)]Source
Type shortcut for attributes
type UAttributes text = Attributes text textSource
Type shortcut for attributes with unqualified names where tag and text are the same string type.
textContent :: (NodeClass n [], Monoid text) => n [] tag text -> textSource
Extract all text content from inside a tag into a single string, including
any text contained in children. This excludes the contents of comments or
processing instructions. To get the text for these node types, use getText
.
A type function to give the type of a list of nodes, using the appropriate
list type for the specified node type, e.g. ListOf (UNode Text)
class (Functor c, List c) => NodeClass n c whereSource
isElement :: n c tag text -> BoolSource
Is the given node an element?
isText :: n c tag text -> BoolSource
Is the given node text?
isCData :: n c tag text -> BoolSource
Is the given node CData?
isProcessingInstruction :: n c tag text -> BoolSource
Is the given node a processing instruction?
isComment :: n c tag text -> BoolSource
Is the given node a comment?
textContentM :: Monoid text => n c tag text -> ItemM c textSource
Extract all text content from inside a tag into a single string, including
any text contained in children. This excludes the contents of comments or
processing instructions. To get the text for these node types, use getText
.
isNamed :: Eq tag => tag -> n c tag text -> BoolSource
Is the given node a tag with the given name?
getName :: Monoid tag => n c tag text -> tagSource
Get the name of this node if it's an element, return empty string otherwise.
hasTarget :: Eq text => text -> n c tag text -> BoolSource
Is the given node a Processing Instruction with the given target?
getTarget :: Monoid text => n c tag text -> textSource
Get the target of this node if it's a Processing Instruction, return empty string otherwise.
getAttributes :: n c tag text -> [(tag, text)]Source
Get the attributes of a node if it's an element, return empty list otherwise.
getChildren :: n c tag text -> c (n c tag text)Source
Get children of a node if it's an element, return empty list otherwise.
getText :: Monoid text => n c tag text -> textSource
Get this node's text if it's a text node, comment, or processing instruction, return empty text otherwise.
modifyName :: (tag -> tag) -> n c tag text -> n c tag textSource
Modify name if it's an element, no-op otherwise.
modifyAttributes :: ([(tag, text)] -> [(tag, text)]) -> n c tag text -> n c tag textSource
Modify attributes if it's an element, no-op otherwise.
modifyChildren :: (c (n c tag text) -> c (n c tag text)) -> n c tag text -> n c tag textSource
Modify children (non-recursively) if it's an element, no-op otherwise.
modifyElement :: ((tag, [(tag, text)], c (n c tag text)) -> (tag', [(tag', text)], c (n c tag' text))) -> n c tag text -> n c tag' textSource
Map an element non-recursively, allowing the tag type to be changed.
mapAllTags :: (tag -> tag') -> n c tag text -> n c tag' textSource
Map all tags (both tag names and attribute names) recursively.
mapNodeContainer :: List c' => (forall a. c a -> ItemM c (c' a)) -> n c tag text -> ItemM c (n c' tag text)Source
Change a node recursively from one container type to another, with a specified function to convert the container type.
mkText :: text -> n c tag textSource
Generic text node constructor.
mapElement :: NodeClass n c => ((tag, [(tag, text)], c (n c tag text)) -> (tag', [(tag', text)], c (n c tag' text))) -> n c tag text -> n c tag' textSource
DEPRECATED. Map an element non-recursively, allowing the tag type to be changed.
mapNodeListContainer :: (NodeClass n c, List c') => (forall a. c a -> ItemM c (c' a)) -> c (n c tag text) -> ItemM c (c' (n c' tag text))Source
Change a list of nodes recursively from one container type to another, with a specified function to convert the container type.
fromNodeContainer :: (NodeClass n c, List c') => n c tag text -> ItemM c (n c' tag text)Source
Change a node recursively from one container type to another. This
extracts the entire tree contents to standard lists and re-constructs them
with the new container type. For monadic list types used in
hexpat-iteratee
this operation forces evaluation.
fromNodeListContainer :: (NodeClass n c, List c') => c (n c tag text) -> ItemM c (c' (n c' tag text))Source
Change a list of nodes recursively from one container type to another. This
extracts the entire tree contents to standard lists and re-constructs them
with the new container type. For monadic list types used in
hexpat-iteratee
this operation forces evaluation.
class NodeClass n c => MkElementClass n c whereSource
A class of node types where an Element can be constructed given a tag, attributes and children.
mkElement :: tag -> Attributes tag text -> c (n c tag text) -> n c tag textSource
Generic element constructor.
(Functor c, List c) => MkElementClass NodeG c | |
(Functor c, List c) => MkElementClass (NodeG ()) c | |
(Functor c, List c) => MkElementClass (NodeG (Maybe a)) c | |
(Functor c, List c) => MkElementClass (NodeG ()) c | |
(Functor c, List c) => MkElementClass (NodeG (Maybe a)) c |
getAttribute :: (NodeClass n c, GenericXMLString tag) => n c tag text -> tag -> Maybe textSource
Get the value of the attribute having the specified name.
setAttribute :: (Eq tag, NodeClass n c, GenericXMLString tag) => tag -> text -> n c tag text -> n c tag textSource
Set the value of the attribute with the specified name to the value, overwriting the first existing attribute with that name if present.
deleteAttribute :: (Eq tag, NodeClass n c, GenericXMLString tag) => tag -> n c tag text -> n c tag textSource
Delete the first attribute matching the specified name.
alterAttribute :: (Eq tag, NodeClass n c, GenericXMLString tag) => tag -> Maybe text -> n c tag text -> n c tag textSource
setAttribute if Just, deleteAttribute if Nothing.
fromElement :: (NodeClass n c, MkElementClass n' c, Monoid tag, Monoid text) => n c tag text -> n' c tag textSource
Generically convert an element of one node type to another. Useful for adding or removing annotations.
:: (NodeClass n c, NodeClass n' c, Monoid tag, Monoid text) | |
=> (tag -> Attributes tag text -> c (n' c tag text) -> n' c tag text) | Element constructor |
-> n c tag text | |
-> n' c tag text |
Generically convert an element of one node type to another, using the specified element constructor. Useful for adding or removing annotations.
fromNodes :: (NodeClass n c, MkElementClass n' c, Monoid tag, Monoid text) => c (n c tag text) -> c (n' c tag text)Source
Generically convert a list of nodes from one node type to another. Useful for adding or removing annotations.
:: (NodeClass n c, NodeClass n' c, Monoid tag, Monoid text) | |
=> (tag -> Attributes tag text -> c (n' c tag text) -> n' c tag text) | Element constructor |
-> c (n c tag text) | |
-> c (n' c tag text) |
Generically convert a list of nodes from one node type to another, using the specified element constructor. Useful for adding or removing annotations.