pugixml 0.2.0 → 0.3.0
raw patch · 6 files changed
+471/−377 lines, 6 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
- Text.XML.Pugi: appendAttr :: (MutableNodeLike n, HasAttribute k) => ByteString -> ByteString -> n k Mutable -> Modify ()
- Text.XML.Pugi: appendAttrs :: (MutableNodeLike n, HasAttribute k) => [Attribute] -> n k Mutable -> Modify ()
- Text.XML.Pugi: appendCData :: (HasChildren k, MutableNodeLike n) => ByteString -> n k Mutable -> Modify (MutableNode CData)
- Text.XML.Pugi: appendChild :: (MutableNodeLike n, HasChildren k) => NodeType -> n k Mutable -> Modify (MutableNode l)
- Text.XML.Pugi: appendComment :: (HasChildren k, MutableNodeLike n) => ByteString -> n k Mutable -> Modify (MutableNode Comment)
- Text.XML.Pugi: appendCopy :: (MutableNodeLike n, HasChildren k) => Node_ k a -> n l Mutable -> Modify (MutableNode k)
- Text.XML.Pugi: appendDeclaration :: (HasChildren k, MutableNodeLike n) => ByteString -> n k Mutable -> Modify (MutableNode Declaration)
- Text.XML.Pugi: appendDoctype :: (HasChildren k, MutableNodeLike n) => ByteString -> n k Mutable -> Modify (MutableNode Doctype)
- Text.XML.Pugi: appendElement :: (HasChildren k, MutableNodeLike n) => ByteString -> n k Mutable -> Modify (MutableNode Element)
- Text.XML.Pugi: appendFlagment :: (MutableNodeLike n, HasChildren k) => ParseConfig -> ByteString -> n k Mutable -> Modify ()
- Text.XML.Pugi: appendPCData :: (HasChildren k, MutableNodeLike n) => ByteString -> n k Mutable -> Modify (MutableNode PCData)
- Text.XML.Pugi: appendPi :: (HasChildren k, MutableNodeLike n) => ByteString -> ByteString -> n k Mutable -> Modify (MutableNode Pi)
- Text.XML.Pugi: class MutableNodeLike (n :: NodeKind -> MutableFlag -> *)
- Text.XML.Pugi: create :: Monad m => (MutableDocument -> Modify ()) -> m Document
- Text.XML.Pugi: data Modify a
- Text.XML.Pugi: instance Alternative Modify
- Text.XML.Pugi: instance Applicative Modify
- Text.XML.Pugi: instance Functor Modify
- Text.XML.Pugi: instance Monad Modify
- Text.XML.Pugi: instance MonadPlus Modify
- Text.XML.Pugi: instance MutableNodeLike Document_
- Text.XML.Pugi: instance MutableNodeLike Node_
- Text.XML.Pugi: instance NodeLike Document_ 'Immutable
- Text.XML.Pugi: instance NodeLike Document_ 'Mutable
- Text.XML.Pugi: instance NodeLike Node_ 'Immutable
- Text.XML.Pugi: instance NodeLike Node_ 'Mutable
- Text.XML.Pugi: modify :: Monad m => Document -> (MutableDocument -> Modify ()) -> m Document
- Text.XML.Pugi: prependAttr :: (MutableNodeLike n, HasAttribute k) => ByteString -> ByteString -> n k Mutable -> Modify ()
- Text.XML.Pugi: prependCData :: (HasChildren k, MutableNodeLike n) => ByteString -> n k Mutable -> Modify (MutableNode CData)
- Text.XML.Pugi: prependChild :: (MutableNodeLike n, HasChildren k) => NodeType -> n k Mutable -> Modify (MutableNode l)
- Text.XML.Pugi: prependComment :: (HasChildren k, MutableNodeLike n) => ByteString -> n k Mutable -> Modify (MutableNode Comment)
- Text.XML.Pugi: prependCopy :: (MutableNodeLike n, HasChildren k) => Node_ k a -> n l Mutable -> Modify (MutableNode k)
- Text.XML.Pugi: prependDeclaration :: (HasChildren k, MutableNodeLike n) => ByteString -> n k Mutable -> Modify (MutableNode Declaration)
- Text.XML.Pugi: prependDoctype :: (HasChildren k, MutableNodeLike n) => ByteString -> n k Mutable -> Modify (MutableNode Doctype)
- Text.XML.Pugi: prependElement :: (HasChildren k, MutableNodeLike n) => ByteString -> n k Mutable -> Modify (MutableNode Element)
- Text.XML.Pugi: prependPCData :: (HasChildren k, MutableNodeLike n) => ByteString -> n k Mutable -> Modify (MutableNode PCData)
- Text.XML.Pugi: prependPi :: (HasChildren k, MutableNodeLike n) => ByteString -> ByteString -> n k Mutable -> Modify (MutableNode Pi)
- Text.XML.Pugi: removeAttr :: (MutableNodeLike n, HasAttribute k) => ByteString -> n k Mutable -> Modify ()
- Text.XML.Pugi: removeChild :: (MutableNodeLike n, HasChildren k) => Node_ k a -> n l Mutable -> Modify ()
- Text.XML.Pugi: setAttr :: (MutableNodeLike n, HasAttribute k) => ByteString -> ByteString -> n k Mutable -> Modify ()
- Text.XML.Pugi: setName :: (MutableNodeLike n, HasName k) => ByteString -> n k Mutable -> Modify ()
- Text.XML.Pugi: setOrAppendAttr :: (HasAttribute k, MutableNodeLike n) => ByteString -> ByteString -> n k Mutable -> Modify ()
- Text.XML.Pugi: setValue :: (MutableNodeLike n, HasValue k) => ByteString -> n k Mutable -> Modify ()
+ Text.XML.Pugi: Immutable :: MutableFlag
+ Text.XML.Pugi: Mutable :: MutableFlag
+ Text.XML.Pugi: asImmutable :: NodeLike n => n k Immutable -> n k Immutable
+ Text.XML.Pugi: asMutable :: NodeLike n => n k Mutable -> n k Mutable
+ Text.XML.Pugi: data MutableFlag
+ Text.XML.Pugi: instance NodeLike Document_
+ Text.XML.Pugi: instance NodeLike Node_
+ Text.XML.Pugi.Mutable: appendAttr :: (MutableNodeLike n, HasAttribute k) => ByteString -> ByteString -> n k Mutable -> Modify ()
+ Text.XML.Pugi.Mutable: appendAttrs :: (MutableNodeLike n, HasAttribute k) => [Attribute] -> n k Mutable -> Modify ()
+ Text.XML.Pugi.Mutable: appendCData :: (HasChildren k, MutableNodeLike n) => ByteString -> n k Mutable -> Modify (MutableNode CData)
+ Text.XML.Pugi.Mutable: appendChild :: (MutableNodeLike n, HasChildren k) => NodeType -> n k Mutable -> Modify (MutableNode l)
+ Text.XML.Pugi.Mutable: appendComment :: (HasChildren k, MutableNodeLike n) => ByteString -> n k Mutable -> Modify (MutableNode Comment)
+ Text.XML.Pugi.Mutable: appendCopy :: (MutableNodeLike n, HasChildren k) => Node_ k a -> n l Mutable -> Modify (MutableNode k)
+ Text.XML.Pugi.Mutable: appendDeclaration :: (HasChildren k, MutableNodeLike n) => ByteString -> n k Mutable -> Modify (MutableNode Declaration)
+ Text.XML.Pugi.Mutable: appendDoctype :: (HasChildren k, MutableNodeLike n) => ByteString -> n k Mutable -> Modify (MutableNode Doctype)
+ Text.XML.Pugi.Mutable: appendElement :: (HasChildren k, MutableNodeLike n) => ByteString -> n k Mutable -> Modify (MutableNode Element)
+ Text.XML.Pugi.Mutable: appendFlagment :: (MutableNodeLike n, HasChildren k) => ParseConfig -> ByteString -> n k Mutable -> Modify ()
+ Text.XML.Pugi.Mutable: appendPCData :: (HasChildren k, MutableNodeLike n) => ByteString -> n k Mutable -> Modify (MutableNode PCData)
+ Text.XML.Pugi.Mutable: appendPi :: (HasChildren k, MutableNodeLike n) => ByteString -> ByteString -> n k Mutable -> Modify (MutableNode Pi)
+ Text.XML.Pugi.Mutable: asNode :: MutableNodeLike n => n k Mutable -> Modify (Node_ k Mutable)
+ Text.XML.Pugi.Mutable: attribute :: (MutableNodeLike n, HasAttribute k) => ByteString -> n k Mutable -> Modify (Maybe ByteString)
+ Text.XML.Pugi.Mutable: child :: (MutableNodeLike n, HasChildren k) => ByteString -> n k Mutable -> Modify (Maybe (MutableNode Unknown))
+ Text.XML.Pugi.Mutable: childValue :: (MutableNodeLike n, HasChildren k) => n k Mutable -> Modify ByteString
+ Text.XML.Pugi.Mutable: childValueByName :: (MutableNodeLike n, HasChildren k) => ByteString -> n k Mutable -> Modify ByteString
+ Text.XML.Pugi.Mutable: class MutableNodeLike (n :: NodeKind -> MutableFlag -> *) where forgetNodeKind = unsafeCoerce
+ Text.XML.Pugi.Mutable: create :: Monad m => (MutableDocument -> Modify ()) -> m Document
+ Text.XML.Pugi.Mutable: data Modify a
+ Text.XML.Pugi.Mutable: evaluate :: (MutableNodeLike n, EvalXPath r) => XPath r -> n k Mutable -> Modify (XPathResult r Mutable)
+ Text.XML.Pugi.Mutable: findAttribute :: MutableNodeLike n => (ByteString -> ByteString -> Bool) -> n k Mutable -> Modify (Maybe Attribute)
+ Text.XML.Pugi.Mutable: findChild :: MutableNodeLike n => (Node -> Bool) -> n k Mutable -> Modify (Maybe (MutableNode Unknown))
+ Text.XML.Pugi.Mutable: findChildByAttr :: (MutableNodeLike n, HasChildren k) => ByteString -> ByteString -> n k Mutable -> Modify (Maybe (MutableNode Unknown))
+ Text.XML.Pugi.Mutable: findChildByNameAndAttr :: (MutableNodeLike n, HasChildren k) => ByteString -> ByteString -> ByteString -> n k Mutable -> Modify (Maybe (MutableNode Unknown))
+ Text.XML.Pugi.Mutable: findNode :: MutableNodeLike n => (Node -> Bool) -> n k Mutable -> Modify (Maybe (MutableNode Unknown))
+ Text.XML.Pugi.Mutable: firstChild :: (MutableNodeLike n, HasChildren k) => n k Mutable -> Modify (Maybe (MutableNode Unknown))
+ Text.XML.Pugi.Mutable: firstElementByPath :: MutableNodeLike n => Char -> ByteString -> n k Mutable -> Modify (Maybe (MutableNode Unknown))
+ Text.XML.Pugi.Mutable: forgetNodeKind :: MutableNodeLike n => n k Mutable -> n Unknown Mutable
+ Text.XML.Pugi.Mutable: getName :: (MutableNodeLike n, HasName k) => n k Mutable -> Modify ByteString
+ Text.XML.Pugi.Mutable: getValue :: (MutableNodeLike n, HasValue k) => n k Mutable -> Modify ByteString
+ Text.XML.Pugi.Mutable: hashValue :: MutableNodeLike n => n k Mutable -> Modify CSize
+ Text.XML.Pugi.Mutable: instance Alternative Modify
+ Text.XML.Pugi.Mutable: instance Applicative Modify
+ Text.XML.Pugi.Mutable: instance Functor Modify
+ Text.XML.Pugi.Mutable: instance Monad Modify
+ Text.XML.Pugi.Mutable: instance MonadPlus Modify
+ Text.XML.Pugi.Mutable: instance MutableNodeLike Document_
+ Text.XML.Pugi.Mutable: instance MutableNodeLike Node_
+ Text.XML.Pugi.Mutable: lastChild :: (MutableNodeLike n, HasChildren k) => n k Mutable -> Modify (Maybe (MutableNode Unknown))
+ Text.XML.Pugi.Mutable: mapSiblingM :: MutableNodeLike n => (MutableNode Unknown -> Modify a) -> n k Mutable -> Modify [a]
+ Text.XML.Pugi.Mutable: mapSiblingM_ :: MutableNodeLike n => (MutableNode Unknown -> Modify a) -> n k Mutable -> Modify ()
+ Text.XML.Pugi.Mutable: modify :: Monad m => Document -> (MutableDocument -> Modify ()) -> m Document
+ Text.XML.Pugi.Mutable: nextSibling :: MutableNodeLike n => n k Mutable -> Modify (Maybe (MutableNode Unknown))
+ Text.XML.Pugi.Mutable: nextSiblingByName :: MutableNodeLike n => ByteString -> n k Mutable -> Modify (Maybe (MutableNode Unknown))
+ Text.XML.Pugi.Mutable: nodeEqual :: MutableNodeLike n => n k Mutable -> n l o -> Modify Bool
+ Text.XML.Pugi.Mutable: nodeType :: MutableNodeLike n => n k Mutable -> Modify NodeType
+ Text.XML.Pugi.Mutable: parent :: MutableNodeLike n => n k Mutable -> Modify (Maybe (MutableNode Unknown))
+ Text.XML.Pugi.Mutable: path :: MutableNodeLike n => Char -> n k Mutable -> Modify ByteString
+ Text.XML.Pugi.Mutable: prependAttr :: (MutableNodeLike n, HasAttribute k) => ByteString -> ByteString -> n k Mutable -> Modify ()
+ Text.XML.Pugi.Mutable: prependCData :: (HasChildren k, MutableNodeLike n) => ByteString -> n k Mutable -> Modify (MutableNode CData)
+ Text.XML.Pugi.Mutable: prependChild :: (MutableNodeLike n, HasChildren k) => NodeType -> n k Mutable -> Modify (MutableNode l)
+ Text.XML.Pugi.Mutable: prependComment :: (HasChildren k, MutableNodeLike n) => ByteString -> n k Mutable -> Modify (MutableNode Comment)
+ Text.XML.Pugi.Mutable: prependCopy :: (MutableNodeLike n, HasChildren k) => Node_ k a -> n l Mutable -> Modify (MutableNode k)
+ Text.XML.Pugi.Mutable: prependDeclaration :: (HasChildren k, MutableNodeLike n) => ByteString -> n k Mutable -> Modify (MutableNode Declaration)
+ Text.XML.Pugi.Mutable: prependDoctype :: (HasChildren k, MutableNodeLike n) => ByteString -> n k Mutable -> Modify (MutableNode Doctype)
+ Text.XML.Pugi.Mutable: prependElement :: (HasChildren k, MutableNodeLike n) => ByteString -> n k Mutable -> Modify (MutableNode Element)
+ Text.XML.Pugi.Mutable: prependPCData :: (HasChildren k, MutableNodeLike n) => ByteString -> n k Mutable -> Modify (MutableNode PCData)
+ Text.XML.Pugi.Mutable: prependPi :: (HasChildren k, MutableNodeLike n) => ByteString -> ByteString -> n k Mutable -> Modify (MutableNode Pi)
+ Text.XML.Pugi.Mutable: prettyNode :: MutableNodeLike n => PrettyConfig -> Int -> n k Mutable -> Modify ByteString
+ Text.XML.Pugi.Mutable: prevSibling :: MutableNodeLike n => n k Mutable -> Modify (Maybe (MutableNode Unknown))
+ Text.XML.Pugi.Mutable: prevSiblingByName :: MutableNodeLike n => ByteString -> n k Mutable -> Modify (Maybe (MutableNode Unknown))
+ Text.XML.Pugi.Mutable: removeAttr :: (MutableNodeLike n, HasAttribute k) => ByteString -> n k Mutable -> Modify ()
+ Text.XML.Pugi.Mutable: removeChild :: (MutableNodeLike n, HasChildren k) => Node_ k a -> n l Mutable -> Modify ()
+ Text.XML.Pugi.Mutable: root :: MutableNodeLike n => n k Mutable -> Modify (Maybe (MutableNode Unknown))
+ Text.XML.Pugi.Mutable: selectNodes :: MutableNodeLike n => XPath NodeSet -> n k Mutable -> Modify (NodeSet Mutable)
+ Text.XML.Pugi.Mutable: selectSingleNode :: MutableNodeLike n => XPath NodeSet -> n k Mutable -> Modify (XPathNode Mutable)
+ Text.XML.Pugi.Mutable: setAttr :: (MutableNodeLike n, HasAttribute k) => ByteString -> ByteString -> n k Mutable -> Modify ()
+ Text.XML.Pugi.Mutable: setName :: (MutableNodeLike n, HasName k) => ByteString -> n k Mutable -> Modify ()
+ Text.XML.Pugi.Mutable: setOrAppendAttr :: (HasAttribute k, MutableNodeLike n) => ByteString -> ByteString -> n k Mutable -> Modify ()
+ Text.XML.Pugi.Mutable: setValue :: (MutableNodeLike n, HasValue k) => ByteString -> n k Mutable -> Modify ()
+ Text.XML.Pugi.Mutable: text :: MutableNodeLike n => n k Mutable -> Modify ByteString
- Text.XML.Pugi: asNode :: NodeLike n m => n k m -> M m (Node_ k m)
+ Text.XML.Pugi: asNode :: NodeLike n => n k Immutable -> Node_ k Immutable
- Text.XML.Pugi: attribute :: (NodeLike n m, HasAttribute k) => ByteString -> n k m -> M m (Maybe ByteString)
+ Text.XML.Pugi: attribute :: (NodeLike n, HasAttribute k) => ByteString -> n k Immutable -> Maybe ByteString
- Text.XML.Pugi: child :: (NodeLike n m, HasChildren k) => ByteString -> n k m -> M m (Maybe (Node_ Unknown m))
+ Text.XML.Pugi: child :: (NodeLike n, HasChildren k) => ByteString -> n k Immutable -> Maybe Node
- Text.XML.Pugi: childValue :: (NodeLike n m, HasChildren k) => n k m -> M m ByteString
+ Text.XML.Pugi: childValue :: (NodeLike n, HasChildren k) => n k Immutable -> ByteString
- Text.XML.Pugi: childValueByName :: (NodeLike n m, HasChildren k) => ByteString -> n k m -> M m ByteString
+ Text.XML.Pugi: childValueByName :: (NodeLike n, HasChildren k) => ByteString -> n k Immutable -> ByteString
- Text.XML.Pugi: class EvalXPath a
+ Text.XML.Pugi: class EvalXPath (a :: poly) where type family XPathResult a (m :: MutableFlag)
- Text.XML.Pugi: class NodeLike n m where forgetNodeKind = unsafeCoerce
+ Text.XML.Pugi: class NodeLike n where forgetNodeKind = unsafeCoerce
- Text.XML.Pugi: data XPath rt
+ Text.XML.Pugi: data XPath (rt :: k)
- Text.XML.Pugi: evaluate :: (NodeLike n m, EvalXPath r) => XPath r -> n k m -> M m r
+ Text.XML.Pugi: evaluate :: (NodeLike n, EvalXPath r) => XPath r -> n k Immutable -> (XPathResult r Immutable)
- Text.XML.Pugi: findAttribute :: NodeLike n m => (ByteString -> ByteString -> Bool) -> n k m -> M m (Maybe Attribute)
+ Text.XML.Pugi: findAttribute :: NodeLike n => (ByteString -> ByteString -> Bool) -> n k Immutable -> Maybe Attribute
- Text.XML.Pugi: findChild :: NodeLike n m => (Node -> Bool) -> n k m -> M m (Maybe (Node_ Unknown m))
+ Text.XML.Pugi: findChild :: NodeLike n => (Node -> Bool) -> n k Immutable -> Maybe Node
- Text.XML.Pugi: findChildByAttr :: (NodeLike n m, HasChildren k) => ByteString -> ByteString -> n k m -> M m (Maybe (Node_ Unknown m))
+ Text.XML.Pugi: findChildByAttr :: (NodeLike n, HasChildren k) => ByteString -> ByteString -> n k Immutable -> Maybe Node
- Text.XML.Pugi: findChildByNameAndAttr :: (NodeLike n m, HasChildren k) => ByteString -> ByteString -> ByteString -> n k m -> M m (Maybe (Node_ Unknown m))
+ Text.XML.Pugi: findChildByNameAndAttr :: (NodeLike n, HasChildren k) => ByteString -> ByteString -> ByteString -> n k Immutable -> Maybe Node
- Text.XML.Pugi: findNode :: NodeLike n m => (Node -> Bool) -> n k m -> M m (Maybe (Node_ Unknown m))
+ Text.XML.Pugi: findNode :: NodeLike n => (Node -> Bool) -> n k Immutable -> Maybe Node
- Text.XML.Pugi: firstChild :: (NodeLike n m, HasChildren k) => n k m -> M m (Maybe (Node_ Unknown m))
+ Text.XML.Pugi: firstChild :: (NodeLike n, HasChildren k) => n k Immutable -> Maybe Node
- Text.XML.Pugi: firstElementByPath :: NodeLike n m => Char -> ByteString -> n k m -> M m (Maybe (Node_ Unknown m))
+ Text.XML.Pugi: firstElementByPath :: NodeLike n => Char -> ByteString -> n k Immutable -> Maybe Node
- Text.XML.Pugi: forgetNodeKind :: NodeLike n m => n k m -> n Unknown m
+ Text.XML.Pugi: forgetNodeKind :: NodeLike n => n k Immutable -> n Unknown Immutable
- Text.XML.Pugi: getName :: (NodeLike n m, HasName k) => n k m -> M m ByteString
+ Text.XML.Pugi: getName :: (NodeLike n, HasName k) => n k Immutable -> ByteString
- Text.XML.Pugi: getValue :: (NodeLike n m, HasValue k) => n k m -> M m ByteString
+ Text.XML.Pugi: getValue :: (NodeLike n, HasValue k) => n k Immutable -> ByteString
- Text.XML.Pugi: hashValue :: NodeLike n m => n k m -> M m CSize
+ Text.XML.Pugi: hashValue :: NodeLike n => n k Immutable -> CSize
- Text.XML.Pugi: lastChild :: (NodeLike n m, HasChildren k) => n k m -> M m (Maybe (Node_ Unknown m))
+ Text.XML.Pugi: lastChild :: (NodeLike n, HasChildren k) => n k Immutable -> Maybe Node
- Text.XML.Pugi: mapAttrs :: (NodeLike n m, HasAttribute k) => (ByteString -> ByteString -> a) -> n k m -> M m [a]
+ Text.XML.Pugi: mapAttrs :: (NodeLike n, HasAttribute k) => (ByteString -> ByteString -> a) -> n k Immutable -> [a]
- Text.XML.Pugi: mapSibling :: NodeLike n m => (Node_ Unknown m -> a) -> n k m -> M m [a]
+ Text.XML.Pugi: mapSibling :: NodeLike n => (Node_ Unknown Immutable -> a) -> n k Immutable -> [a]
- Text.XML.Pugi: nextSibling :: NodeLike n m => n k m -> M m (Maybe (Node_ Unknown m))
+ Text.XML.Pugi: nextSibling :: NodeLike n => n k Immutable -> Maybe Node
- Text.XML.Pugi: nextSiblingByName :: NodeLike n m => ByteString -> n k m -> M m (Maybe (Node_ Unknown m))
+ Text.XML.Pugi: nextSiblingByName :: NodeLike n => ByteString -> n k Immutable -> Maybe Node
- Text.XML.Pugi: nodeEqual :: NodeLike n m => n k m -> n l o -> M m Bool
+ Text.XML.Pugi: nodeEqual :: NodeLike n => n k Immutable -> n l Immutable -> Bool
- Text.XML.Pugi: nodeType :: NodeLike n m => n k m -> M m NodeType
+ Text.XML.Pugi: nodeType :: NodeLike n => n k Immutable -> NodeType
- Text.XML.Pugi: parent :: NodeLike n m => n k m -> M m (Maybe (Node_ Unknown m))
+ Text.XML.Pugi: parent :: NodeLike n => n k Immutable -> Maybe Node
- Text.XML.Pugi: path :: NodeLike n m => Char -> n k m -> M m ByteString
+ Text.XML.Pugi: path :: NodeLike n => Char -> n k Immutable -> ByteString
- Text.XML.Pugi: prettyNode :: NodeLike n m => PrettyConfig -> Int -> n k m -> M m ByteString
+ Text.XML.Pugi: prettyNode :: NodeLike n => PrettyConfig -> Int -> n k Immutable -> ByteString
- Text.XML.Pugi: prevSibling :: NodeLike n m => n k m -> M m (Maybe (Node_ Unknown m))
+ Text.XML.Pugi: prevSibling :: NodeLike n => n k Immutable -> Maybe Node
- Text.XML.Pugi: prevSiblingByName :: NodeLike n m => ByteString -> n k m -> M m (Maybe (Node_ Unknown m))
+ Text.XML.Pugi: prevSiblingByName :: NodeLike n => ByteString -> n k Immutable -> Maybe Node
- Text.XML.Pugi: root :: NodeLike n m => n k m -> M m (Maybe (Node_ Unknown m))
+ Text.XML.Pugi: root :: NodeLike n => n k Immutable -> Maybe Node
- Text.XML.Pugi: selectNodes :: NodeLike n m => XPath (NodeSet m) -> n k m -> M m (NodeSet m)
+ Text.XML.Pugi: selectNodes :: NodeLike n => XPath NodeSet -> n k Immutable -> NodeSet Immutable
- Text.XML.Pugi: selectSingleNode :: NodeLike n m => XPath (NodeSet m) -> n k m -> M m (XPathNode m)
+ Text.XML.Pugi: selectSingleNode :: NodeLike n => XPath NodeSet -> n k Immutable -> XPathNode Immutable
- Text.XML.Pugi: text :: NodeLike n m => n k m -> M m ByteString
+ Text.XML.Pugi: text :: NodeLike n => n k Immutable -> ByteString
Files
- Text/XML/Pugi.hs +74/−360
- Text/XML/Pugi/Foreign/Node.hs +8/−8
- Text/XML/Pugi/Foreign/Types.hs +3/−2
- Text/XML/Pugi/Foreign/XPath.hs +17/−6
- Text/XML/Pugi/Mutable.hs +367/−0
- pugixml.cabal +2/−1
Text/XML/Pugi.hs view
@@ -2,12 +2,22 @@ {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE TypeSynonymInstances #-} {-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE DeriveFunctor #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE LambdaCase #-}+{-# LANGUAGE PolyKinds #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE CPP #-} +-- | import/langauge+--+-- @+-- \> :set -XOverloadedStrings -XQuasiQuotes+-- \> import Text.XML.Pugi+-- \> import qualified Text.XML.Pugi.Mutable as M+-- @+-- -- | parse xml -- -- @@@ -33,24 +43,24 @@ -- -- @ -- testHtml :: IO 'Document'--- testHtml = 'create' $ \doc -\> do--- decl <- 'appendDeclaration' \"xml\" doc--- 'appendAttrs' [(\"version\", \"1.0\"), (\"lang\", \"ja\")] decl+-- testHtml = M.create $ \doc -\> do+-- decl <- M.appendDeclaration \"xml\" doc+-- M.appendAttrs [(\"version\", \"1.0\"), (\"lang\", \"ja\")] decl ----- 'appendDoctype' \"html\" doc+-- M.appendDoctype \"html\" doc ----- html <- 'appendElement' \"html\" doc--- body <- appendElement \"body\" html--- div_ <- appendElement \"div\" body--- a <- appendElement \"a\" div_--- 'appendAttr' \"href\" \"http:\/\/example.com\" a--- txt <- 'appendPCData' \"example.com\" a+-- html <- M.appendElement \"html\" doc+-- body <- M.appendElement \"body\" html+-- div_ <- M.appendElement \"div\" body+-- a <- M.appendElement \"a\" div_+-- M.appendAttr \"href\" \"http:\/\/example.com\" a+-- txt <- M.appendPCData \"example.com\" a -- return () -- @ -- -- @ -- -- testHtml for copy&paste to ghci.--- \> doc \<- create $ \\doc -\> appendDeclaration \"xml\" doc >>= \\decl -\> appendAttrs [(\"version\", \"1.0\"), (\"lang\", \"ja\")] decl >> appendDoctype \"html\" doc >> appendElement \"html\" doc >>= \\html -\> appendElement \"body\" html >>= \\body -\> appendElement \"div\" body >>= \\div_ -\> appendElement \"a\" div_ >>= \\a -\> appendAttr \"href\" \"http:\/\/example.com\" a >> appendPCData \"example.com\" a >> return ()+-- \> doc \<- M.create $ \\doc -\> M.appendDeclaration \"xml\" doc >>= \\decl -\> M.appendAttrs [(\"version\", \"1.0\"), (\"lang\", \"ja\")] decl >> M.appendDoctype \"html\" doc >> M.appendElement \"html\" doc >>= \\html -\> M.appendElement \"body\" html >>= \\body -\> M.appendElement \"div\" body >>= \\div_ -\> M.appendElement \"a\" div_ >>= \\a -\> M.appendAttr \"href\" \"http:\/\/example.com\" a >> M.appendPCData \"example.com\" a >> return () -- -- \> doc -- Document \<?xml version=\"1.0\" lang=\"ja\"?\>\<!DOCTYPE html\>\<html\>\<body\>\<div\>\<a href=\"http:\/\/example.com\"\>example.com\<\/a\>\<\/div\>\<\/body\>\<\/html\>@@ -85,14 +95,14 @@ -- modify xml -- -- @--- modify doc $ \\d -\> 'selectSingleNode' [xpath|\/\/a|] d >>= \\(Left a) -\> setOrAppendAttr \"href\" \"#\" a+-- M.modify doc $ \\d -\> M.selectSingleNode [xpath|\/\/a|] d >>= \\(Left a) -\> M.setOrAppendAttr \"href\" \"#\" a -- Document \<?xml version=\"1.0\" lang=\"ja\"?\>\<!DOCTYPE html\>\<html\>\<body\>\<div\>\<a href=\"#\"\>example.com\<\/a\>\<\/div\>\<\/body\>\<\/html\> -- @ -- module Text.XML.Pugi ( -- * Document- Document_, Document, MutableDocument+ Document_, Document, MutableDocument, MutableFlag(..) -- ** parse , D.ParseConfig(..), D.ParseException(..) , parse, D.parseFile@@ -104,28 +114,18 @@ , Node_, Node, MutableNode , NodeKind(..) , HasName, HasValue, HasAttribute, HasChildren+ , asMutable, asImmutable -- ** getter- , M, NodeLike(..)-- -- ** setter- , Modify- , create, modify- , MutableNodeLike(..)- , appendAttrs- , setOrAppendAttr- -- *** specified append/prepend child- , appendElement, prependElement- , appendDeclaration, prependDeclaration- , appendPCData, prependPCData- , appendCData, prependCData- , appendComment, prependComment- , appendDoctype, prependDoctype- , appendPi, prependPi+ , NodeLike(..) -- * XPath , XPath- , X.EvalXPath+#if __GLASGOW_HASKELL__ > 707+ , X.EvalXPath(X.XPathResult)+#else+ , X.EvalXPath(..)+#endif , X.xpath -- ** NodeSet , NodeSet, XPathNode, Attribute@@ -138,9 +138,6 @@ , def ) where -import Control.Applicative-import Control.Monad- import Foreign.C.Types import Text.XML.Pugi.Const@@ -178,75 +175,57 @@ instance Eq (Document_ k Immutable) where (==) = nodeEqual --- |--- @--- M Immutable a = a--- M Mutable a = 'Modify' a--- @----type family M (m :: MutableFlag) a-type instance M Immutable a = a-type instance M Mutable a = Modify a---- |--- @--- instance NodeLike 'Document_' Immutable--- instance NodeLike 'Node_' Immutable--- instance NodeLike 'Document_' Mutable--- instance NodeLike 'Node_' Mutable--- @----class NodeLike n m where- asNode :: n k m -> M m (Node_ k m)- nodeEqual :: n k m -> n l o -> M m Bool- forgetNodeKind :: n k m -> n Unknown m+class NodeLike n where+ asNode :: n k Immutable -> Node_ k Immutable+ nodeEqual :: n k Immutable -> n l Immutable -> Bool+ forgetNodeKind :: n k Immutable -> n Unknown Immutable forgetNodeKind = unsafeCoerce {-# INLINE forgetNodeKind #-}- prettyNode :: D.PrettyConfig -> Int -> n k m -> M m L.ByteString- hashValue :: n k m -> M m CSize- nodeType :: n k m -> M m NodeType- getName :: HasName k => n k m -> M m S.ByteString- getValue :: HasValue k => n k m -> M m S.ByteString- parent :: n k m -> M m (Maybe (Node_ Unknown m))- firstChild :: HasChildren k => n k m -> M m (Maybe (Node_ Unknown m))- lastChild :: HasChildren k => n k m -> M m (Maybe (Node_ Unknown m))- nextSibling :: n k m -> M m (Maybe (Node_ Unknown m))- prevSibling :: n k m -> M m (Maybe (Node_ Unknown m))- child :: HasChildren k => S.ByteString -> n k m -> M m (Maybe (Node_ Unknown m))- attribute :: HasAttribute k => S.ByteString -> n k m -> M m (Maybe S.ByteString)- nextSiblingByName :: S.ByteString -> n k m -> M m (Maybe (Node_ Unknown m))- prevSiblingByName :: S.ByteString -> n k m -> M m (Maybe (Node_ Unknown m))+ prettyNode :: D.PrettyConfig -> Int -> n k Immutable -> L.ByteString+ hashValue :: n k Immutable -> CSize+ nodeType :: n k Immutable -> NodeType+ getName :: HasName k => n k Immutable -> S.ByteString+ getValue :: HasValue k => n k Immutable -> S.ByteString+ parent :: n k Immutable -> Maybe Node+ firstChild :: HasChildren k => n k Immutable -> Maybe Node+ lastChild :: HasChildren k => n k Immutable -> Maybe Node+ nextSibling :: n k Immutable -> Maybe Node+ prevSibling :: n k Immutable -> Maybe Node+ child :: HasChildren k => S.ByteString -> n k Immutable -> Maybe Node+ attribute :: HasAttribute k => S.ByteString -> n k Immutable -> Maybe S.ByteString+ nextSiblingByName :: S.ByteString -> n k Immutable -> Maybe Node+ prevSiblingByName :: S.ByteString -> n k Immutable -> Maybe Node findChildByNameAndAttr :: HasChildren k => S.ByteString -- ^ node name -> S.ByteString -- ^ attribute name -> S.ByteString -- ^ attribute value- -> n k m -> M m (Maybe (Node_ Unknown m))+ -> n k Immutable -> Maybe Node findChildByAttr :: HasChildren k => S.ByteString -- ^ attribute name -> S.ByteString -- ^ attribute value- -> n k m -> M m (Maybe (Node_ Unknown m))- childValue :: HasChildren k => n k m -> M m S.ByteString- childValueByName :: HasChildren k => S.ByteString -> n k m -> M m S.ByteString- text :: n k m -> M m S.ByteString+ -> n k Immutable -> Maybe Node+ childValue :: HasChildren k => n k Immutable -> S.ByteString+ childValueByName :: HasChildren k => S.ByteString -> n k Immutable -> S.ByteString+ text :: n k Immutable -> S.ByteString -- | find attribute by predicate. since v0.2.0.- findAttribute :: (S.ByteString -> S.ByteString -> Bool) -> n k m -> M m (Maybe Attribute)+ findAttribute :: (S.ByteString -> S.ByteString -> Bool) -> n k Immutable -> Maybe Attribute -- | find child by predicate. since v0.2.0.- findChild :: (Node -> Bool) -> n k m -> M m (Maybe (Node_ Unknown m))+ findChild :: (Node -> Bool) -> n k Immutable -> Maybe Node -- | find node by predicate. since v0.2.0.- findNode :: (Node -> Bool) -> n k m -> M m (Maybe (Node_ Unknown m))- mapSibling :: (Node_ Unknown m -> a) -> n k m -> M m [a]- mapAttrs :: HasAttribute k => (S.ByteString -> S.ByteString -> a) -> n k m -> M m [a]- path :: Char -> n k m -> M m S.ByteString- firstElementByPath :: Char -> S.ByteString -> n k m -> M m (Maybe (Node_ Unknown m))- root :: n k m -> M m (Maybe (Node_ Unknown m))- evaluate :: X.EvalXPath r => XPath r -> n k m -> M m r- selectSingleNode :: XPath (NodeSet m) -> n k m -> M m (XPathNode m)- selectNodes :: XPath (NodeSet m) -> n k m -> M m (NodeSet m)+ findNode :: (Node -> Bool) -> n k Immutable -> Maybe Node+ mapSibling :: (Node_ Unknown Immutable -> a) -> n k Immutable -> [a]+ mapAttrs :: HasAttribute k => (S.ByteString -> S.ByteString -> a) -> n k Immutable -> [a]+ path :: Char -> n k Immutable -> S.ByteString+ firstElementByPath :: Char -> S.ByteString -> n k Immutable -> Maybe Node+ root :: n k Immutable -> Maybe Node+ evaluate :: X.EvalXPath r => XPath r -> n k Immutable -> (X.XPathResult r Immutable)+ selectSingleNode :: XPath NodeSet -> n k Immutable -> XPathNode Immutable+ selectNodes :: XPath NodeSet -> n k Immutable -> NodeSet Immutable -instance NodeLike Document_ Immutable where+instance NodeLike Document_ where asNode = unsafeDupablePerformIO . N.asNode nodeEqual a = unsafeDupablePerformIO . N.nodeEqual a prettyNode cfg dph = unsafeDupablePerformIO . N.prettyNode cfg dph@@ -281,7 +260,7 @@ selectSingleNode x = unsafeDupablePerformIO . N.selectSingleNode x selectNodes x = unsafeDupablePerformIO . N.selectNodes x -instance NodeLike Node_ Immutable where+instance NodeLike Node_ where asNode = unsafeDupablePerformIO . N.asNode nodeEqual a = unsafeDupablePerformIO . N.nodeEqual a prettyNode cfg dph = unsafeDupablePerformIO . N.prettyNode cfg dph@@ -316,177 +295,6 @@ selectSingleNode x = unsafeDupablePerformIO . N.selectSingleNode x selectNodes x = unsafeDupablePerformIO . N.selectNodes x -instance NodeLike Document_ Mutable where- asNode = Modify . fmap Right . N.asNode- nodeEqual a = Modify . fmap Right . N.nodeEqual a- prettyNode cfg dph = Modify . fmap Right . N.prettyNode cfg dph- hashValue = Modify . fmap Right . N.hashValue- nodeType = Modify . fmap Right . N.nodeType- getName = Modify . fmap Right . N.getName- getValue = Modify . fmap Right . N.getValue- parent = Modify . fmap Right . N.parent- firstChild = Modify . fmap Right . N.firstChild- lastChild = Modify . fmap Right . N.lastChild- nextSibling = Modify . fmap Right . N.nextSibling- prevSibling = Modify . fmap Right . N.prevSibling- child n = Modify . fmap Right . N.child n- attribute n = Modify . fmap Right . N.attribute n- nextSiblingByName n = Modify . fmap Right . N.nextSiblingByName n- prevSiblingByName n = Modify . fmap Right . N.prevSiblingByName n- findChildByNameAndAttr nn an av =- Modify . fmap Right . N.findChildByNameAndAttr nn an av- findChildByAttr an av = Modify . fmap Right . N.findChildByAttr an av- childValue = Modify . fmap Right . N.childValue- childValueByName n = Modify . fmap Right . N.childValueByName n- text = Modify . fmap Right . N.text- findAttribute f = Modify . fmap Right . N.findAttribute f- findChild f = Modify . fmap Right . N.findChild f- findNode f = Modify . fmap Right . N.findNode f- mapSibling f = Modify . fmap Right . N.mapSiblingM (return . f)- mapAttrs f = Modify . fmap Right . N.mapAttrsM (\k v -> return $ f k v)- path c = Modify . fmap Right . N.path c- firstElementByPath c p = Modify . fmap Right . N.firstElementByPath c p- root = Modify . fmap Right . N.root- evaluate x = Modify . fmap Right . X.evaluateXPath x- selectSingleNode x = Modify . fmap Right . N.selectSingleNode x- selectNodes x = Modify . fmap Right . N.selectNodes x--instance NodeLike Node_ Mutable where- asNode = Modify . fmap Right . N.asNode- nodeEqual a = Modify . fmap Right . N.nodeEqual a- prettyNode cfg dph = Modify . fmap Right . N.prettyNode cfg dph- hashValue = Modify . fmap Right . N.hashValue- nodeType = Modify . fmap Right . N.nodeType- getName = Modify . fmap Right . N.getName- getValue = Modify . fmap Right . N.getValue- parent = Modify . fmap Right . N.parent- firstChild = Modify . fmap Right . N.firstChild- lastChild = Modify . fmap Right . N.lastChild- nextSibling = Modify . fmap Right . N.nextSibling- prevSibling = Modify . fmap Right . N.prevSibling- child n = Modify . fmap Right . N.child n- attribute n = Modify . fmap Right . N.attribute n- nextSiblingByName n = Modify . fmap Right . N.nextSiblingByName n- prevSiblingByName n = Modify . fmap Right . N.prevSiblingByName n- findChildByNameAndAttr nn an av =- Modify . fmap Right . N.findChildByNameAndAttr nn an av- findChildByAttr an av = Modify . fmap Right . N.findChildByAttr an av- childValue = Modify . fmap Right . N.childValue- childValueByName n = Modify . fmap Right . N.childValueByName n- text = Modify . fmap Right . N.text- findAttribute f = Modify . fmap Right . N.findAttribute f- findChild f = Modify . fmap Right . N.findChild f- findNode f = Modify . fmap Right . N.findNode f- mapSibling f = Modify . fmap Right . N.mapSiblingM (return . f)- mapAttrs f = Modify . fmap Right . N.mapAttrsM (\k v -> return $ f k v)- path c = Modify . fmap Right . N.path c- firstElementByPath c p = Modify . fmap Right . N.firstElementByPath c p- root = Modify . fmap Right . N.root- evaluate x = Modify . fmap Right . X.evaluateXPath x- selectSingleNode x = Modify . fmap Right . N.selectSingleNode x- selectNodes x = Modify . fmap Right . N.selectNodes x--newtype Modify a = Modify { runModify :: IO (Either String a) }- deriving Functor--instance Applicative Modify where- pure = Modify . return . Right- mf <*> ma = Modify $ runModify mf >>= \case- Left e -> return (Left e)- Right f -> runModify ma >>= \case- Left e -> return (Left e)- Right a -> return (Right (f a))--instance Monad Modify where- return = pure- ma >>= g = Modify $ runModify ma >>= \case- Left e -> return (Left e)- Right a -> runModify $ g a- fail = Modify . return . Left--instance Alternative Modify where- empty = Modify . return $ Left "empty"- ma <|> mb = Modify $ runModify ma >>= \case- Left _ -> runModify mb- Right a -> return $ Right a--instance MonadPlus Modify where- mzero = empty- mplus = (<|>)--mLiftIO :: IO a -> Modify a-mLiftIO io = Modify $ Right <$> io---- | create document from scratch.-create :: Monad m => (MutableDocument -> Modify ()) -> m Document-create m = either fail (return . D.freezeDocument) . unsafeDupablePerformIO . runModify $ do- d <- mLiftIO D.createDocument- m d- return d---- | modify document.-modify :: Monad m => Document -> (MutableDocument -> Modify ()) -> m Document-modify prt m = either fail (return . D.freezeDocument) . unsafePerformIO . runModify $ do- d <- mLiftIO $ D.copyDocument prt- m d- return d--appendElement :: (HasChildren k, MutableNodeLike n)- => S.ByteString -> n k Mutable -> Modify (MutableNode Element)-appendElement n e = appendChild nodeTypeElement e >>= \r -> setName n r >> return r--prependElement :: (HasChildren k, MutableNodeLike n)- => S.ByteString -> n k Mutable -> Modify (MutableNode Element)-prependElement n e = prependChild nodeTypeElement e >>= \r -> setName n r >> return r--appendDeclaration :: (HasChildren k, MutableNodeLike n)- => S.ByteString -> n k Mutable -> Modify (MutableNode Declaration)-appendDeclaration n e = appendChild nodeTypeDeclaration e >>= \r -> setName n r >> return r--prependDeclaration :: (HasChildren k, MutableNodeLike n)- => S.ByteString -> n k Mutable -> Modify (MutableNode Declaration)-prependDeclaration n e = prependChild nodeTypeDeclaration e >>= \r -> setName n r >> return r--appendPCData :: (HasChildren k, MutableNodeLike n)- => S.ByteString -> n k Mutable -> Modify (MutableNode PCData)-appendPCData n e = appendChild nodeTypePCData e >>= \r -> setValue n r >> return r--prependPCData :: (HasChildren k, MutableNodeLike n)- => S.ByteString -> n k Mutable -> Modify (MutableNode PCData)-prependPCData n e = prependChild nodeTypePCData e >>= \r -> setValue n r >> return r--appendCData :: (HasChildren k, MutableNodeLike n)- => S.ByteString -> n k Mutable -> Modify (MutableNode CData)-appendCData n e = appendChild nodeTypeCData e >>= \r -> setValue n r >> return r--prependCData :: (HasChildren k, MutableNodeLike n)- => S.ByteString -> n k Mutable -> Modify (MutableNode CData)-prependCData n e = prependChild nodeTypeCData e >>= \r -> setValue n r >> return r--appendComment :: (HasChildren k, MutableNodeLike n)- => S.ByteString -> n k Mutable -> Modify (MutableNode Comment)-appendComment n e = appendChild nodeTypeComment e >>= \r -> setValue n r >> return r--prependComment :: (HasChildren k, MutableNodeLike n)- => S.ByteString -> n k Mutable -> Modify (MutableNode Comment)-prependComment n e = prependChild nodeTypeComment e >>= \r -> setValue n r >> return r--appendDoctype :: (HasChildren k, MutableNodeLike n)- => S.ByteString -> n k Mutable -> Modify (MutableNode Doctype)-appendDoctype n e = appendChild nodeTypeDoctype e >>= \r -> setValue n r >> return r--prependDoctype :: (HasChildren k, MutableNodeLike n)- => S.ByteString -> n k Mutable -> Modify (MutableNode Doctype)-prependDoctype n e = prependChild nodeTypeDoctype e >>= \r -> setValue n r >> return r--appendPi :: (HasChildren k, MutableNodeLike n)- => S.ByteString -> S.ByteString -> n k Mutable -> Modify (MutableNode Pi)-appendPi n v e = appendChild nodeTypePi e >>= \r -> setName n r >> setValue v r >> return r--prependPi :: (HasChildren k, MutableNodeLike n)- => S.ByteString -> S.ByteString -> n k Mutable -> Modify (MutableNode Pi)-prependPi n v e = prependChild nodeTypePi e >>= \r -> setName n r >> setValue v r >> return r- class HasName (k :: NodeKind) instance HasName Element instance HasName Declaration@@ -510,108 +318,6 @@ instance HasChildren Element instance HasChildren Unknown -class MutableNodeLike (n :: NodeKind -> MutableFlag -> *) where- setName :: HasName k => S.ByteString -> n k Mutable -> Modify ()- setValue :: HasValue k => S.ByteString -> n k Mutable -> Modify ()- appendAttr :: HasAttribute k => S.ByteString -> S.ByteString -> n k Mutable -> Modify ()- prependAttr :: HasAttribute k => S.ByteString -> S.ByteString -> n k Mutable -> Modify ()- setAttr :: HasAttribute k => S.ByteString -> S.ByteString -> n k Mutable -> Modify ()- -- | generic appendChild method. Recommend to use 'appendElement' etc...- appendChild :: HasChildren k => NodeType -> n k Mutable -> Modify (MutableNode l)- -- | generic prependChild method. Recommend to use 'prependElement' etc...- prependChild :: HasChildren k => NodeType -> n k Mutable -> Modify (MutableNode l)- appendCopy :: HasChildren k => Node_ k a -> n l Mutable -> Modify (MutableNode k)- prependCopy :: HasChildren k => Node_ k a -> n l Mutable -> Modify (MutableNode k)- removeAttr :: HasAttribute k => S.ByteString -> n k Mutable -> Modify ()- removeChild :: HasChildren k => Node_ k a -> n l Mutable -> Modify ()- appendFlagment :: HasChildren k => D.ParseConfig -> S.ByteString -> n k Mutable -> Modify ()--appendAttrs :: (MutableNodeLike n, HasAttribute k) => [Attribute] -> n k Mutable -> Modify ()-appendAttrs as n = mapM_ (\(k,v) -> appendAttr k v n) as--instance MutableNodeLike Node_ where- setName = isetName- setValue = isetValue- appendAttr = iappendAttr- prependAttr = iprependAttr- setAttr = isetAttr- appendChild = iappendChild- prependChild = iprependChild- appendCopy = iappendCopy- prependCopy = iprependCopy- removeAttr = iremoveAttr- removeChild = iremoveChild- appendFlagment = iappendFlagment--instance MutableNodeLike Document_ where- setName = isetName- setValue = isetValue- appendAttr = iappendAttr- prependAttr = iprependAttr- setAttr = isetAttr- appendChild = iappendChild- prependChild = iprependChild- appendCopy = iappendCopy- prependCopy = iprependCopy- removeAttr = iremoveAttr- removeChild = iremoveChild- appendFlagment = iappendFlagment--setOrAppendAttr :: (HasAttribute k, MutableNodeLike n)- => S.ByteString -> S.ByteString -> n k Mutable -> Modify ()-setOrAppendAttr k v n = setAttr k v n <|> appendAttr k v n--isetName :: N.NodeLike n => S.ByteString -> n k Mutable -> Modify ()-isetName n nd = mLiftIO (N.setName n nd) >>= - flip unless (fail $ "setName: " ++ show n)--isetValue :: N.NodeLike n => S.ByteString -> n k Mutable -> Modify ()-isetValue n nd = mLiftIO (N.setValue n nd) >>=- flip unless (fail $ "setValue: " ++ show n)--iappendAttr :: N.NodeLike n => S.ByteString -> S.ByteString- -> n k Mutable -> Modify ()-iappendAttr k v n = mLiftIO (N.appendAttr k v n) >>=- flip unless (fail $ "appendAttr: " ++ show k ++ " = " ++ show v)--iprependAttr :: N.NodeLike n => S.ByteString -> S.ByteString- -> n k Mutable -> Modify ()-iprependAttr k v n = mLiftIO (N.prependAttr k v n) >>=- flip unless (fail $ "appendAttr: " ++ show k ++ " = " ++ show v)--isetAttr :: N.NodeLike n => S.ByteString -> S.ByteString- -> n k Mutable -> Modify ()-isetAttr k v n = mLiftIO (N.setAttr k v n) >>=- flip unless (fail $ "setAttr: " ++ show k ++ " = " ++ show v)--iappendChild :: N.NodeLike n => NodeType -> n l Mutable -> Modify (MutableNode k)-iappendChild t n = mLiftIO (N.appendChild t n) >>=- maybe (fail $ "appendChild: " ++ show t) return--iprependChild :: N.NodeLike n => NodeType -> n l Mutable -> Modify (MutableNode k)-iprependChild t n = mLiftIO (N.prependChild t n) >>=- maybe (fail $ "prependChild: " ++ show t) return--iappendCopy :: N.NodeLike n => Node_ k a -> n l Mutable -> Modify (MutableNode k)-iappendCopy t n = mLiftIO (N.appendCopy t n) >>=- maybe (fail "appendCopy") return--iprependCopy :: N.NodeLike n => Node_ k a -> n l Mutable -> Modify (MutableNode k)-iprependCopy t n = mLiftIO (N.prependCopy t n) >>=- maybe (fail "prependCopy") return--iremoveAttr :: N.NodeLike n => S.ByteString -> n k Mutable -> Modify ()-iremoveAttr n nd = mLiftIO (N.removeAttr n nd) >>=- flip unless (fail $ "removeAttr: " ++ show n)--iremoveChild :: N.NodeLike n => Node_ l a -> n k Mutable -> Modify ()-iremoveChild n nd = mLiftIO (N.removeChild n nd) >>=- flip unless (fail "removeChild")--iappendFlagment :: N.NodeLike n => D.ParseConfig -> S.ByteString -> n k Mutable -> Modify ()-iappendFlagment cfg str n = mLiftIO (N.appendBuffer cfg str n) >>=- flip unless (fail $ "appendFlagment: " ++ show str)- nodeSetIndex :: NodeSet m -> Int -> XPathNode m nodeSetIndex n = unsafeDupablePerformIO . X.nodeSetIndex n @@ -620,3 +326,11 @@ nodeSetToList :: NodeSet m -> [XPathNode m] nodeSetToList = nodeSetMap id++asMutable :: N.NodeLike n => n k Mutable -> n k Mutable+asMutable = id+{-# INLINE asMutable #-}++asImmutable :: N.NodeLike n => n k Immutable -> n k Immutable+asImmutable = id+{-# INLINE asImmutable #-}
Text/XML/Pugi/Foreign/Node.hs view
@@ -108,8 +108,8 @@ foreign import ccall node_print :: Ptr n -> FunPtr Writer -> CString -> FormatFlags -> Encoding -> CUInt -> IO () -foreign import ccall select_single_node :: Ptr n -> Ptr (XPath (NodeSet m)) -> IO (Ptr XNode)-foreign import ccall select_nodes :: Ptr n -> Ptr (XPath (NodeSet m)) -> IO (Ptr (NodeSet m))+foreign import ccall select_single_node :: Ptr n -> Ptr (XPath NodeSet) -> IO (Ptr XNode)+foreign import ccall select_nodes :: Ptr n -> Ptr (XPath NodeSet) -> IO (Ptr (NodeSet m)) nodeCommon :: NodeLike n => n k m -> (Ptr (n k m) -> IO (Ptr (Node_ l m))) -> IO (Maybe (Node_ l m)) nodeCommon n f = withNode n $ \p -> do@@ -213,17 +213,17 @@ findNode :: (Node -> Bool) -> n k m -> IO (Maybe (Node_ Unknown m)) findNode f nd = nodeCommon nd $ \n -> with_node_pred f $ find_node n - mapSiblingM_ :: (Node_ Unknown m -> IO ()) -> n k m -> IO ()+ mapSiblingM_ :: (Node_ Unknown m -> IO b) -> n k m -> IO () mapSiblingM_ func n = withNode n $ \p -> do- let f e = func . Node =<< newForeignPtr_ e+ let f e = () <$ (func . Node =<< newForeignPtr_ e) bracket (wrap_node_mapper f) freeHaskellFunPtr $ node_map_sibling p - mapAttrsM_ :: (S.ByteString -> S.ByteString -> IO ()) -> n k m -> IO ()+ mapAttrsM_ :: (S.ByteString -> S.ByteString -> IO b) -> n k m -> IO () mapAttrsM_ func n = withNode n $ \p -> do let f a = do nm <- attrName a val <- attrValue a- func nm val+ () <$ func nm val bracket (wrap_attr_mapper f) freeHaskellFunPtr $ node_map_attributes p path :: Char -> n k m -> IO S.ByteString@@ -282,12 +282,12 @@ bracket (append_buffer n c (fromIntegral l) flags enc) delete_parse_result parse_is_success - selectSingleNode :: XPath (NodeSet m) -> n k m -> IO (XPathNode m)+ selectSingleNode :: XPath NodeSet -> n k m -> IO (XPathNode m) selectSingleNode (XPath xp) nd = withNode nd $ \n -> withForeignPtr xp $ \x -> do select_single_node n x >>= peekXNode - selectNodes :: XPath (NodeSet m) -> n k m -> IO (NodeSet m)+ selectNodes :: XPath NodeSet -> n k m -> IO (NodeSet m) selectNodes (XPath xp) nd = withNode nd $ \n -> withForeignPtr xp $ \x -> do p <- select_nodes n x l <- fromIntegral <$> xpath_node_set_size p
Text/XML/Pugi/Foreign/Types.hs view
@@ -1,6 +1,7 @@ {-# LANGUAGE ForeignFunctionInterface #-}-{-# LANGUAGE DataKinds #-} {-# LANGUAGE KindSignatures #-}+{-# LANGUAGE PolyKinds #-}+{-# LANGUAGE DataKinds #-} module Text.XML.Pugi.Foreign.Types where import Foreign.ForeignPtr@@ -28,7 +29,7 @@ newtype ParseResult = ParseResult (Ptr ParseResult) -newtype XPath rt = XPath (ForeignPtr (XPath rt))+newtype XPath (rt :: k) = XPath (ForeignPtr (XPath rt)) data NodeSet (m :: MutableFlag) = NodeSet Int (ForeignPtr (NodeSet m)) instance Show (NodeSet m) where
Text/XML/Pugi/Foreign/XPath.hs view
@@ -1,7 +1,13 @@ {-# LANGUAGE ForeignFunctionInterface #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE TypeFamilies #-} {-# LANGUAGE MultiWayIf #-} {-# LANGUAGE LambdaCase #-}-{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE PolyKinds #-}+ module Text.XML.Pugi.Foreign.XPath where import Language.Haskell.TH@@ -29,7 +35,7 @@ foreign import ccall xpath_query_evaluate_boolean :: Ptr (XPath Bool) -> Ptr n -> IO CInt foreign import ccall xpath_query_evaluate_number :: Ptr (XPath Double) -> Ptr n -> IO CDouble foreign import ccall xpath_query_evaluate_string :: Ptr (XPath S.ByteString) -> Ptr n -> IO CString-foreign import ccall xpath_query_evaluate_node_set :: Ptr (XPath (NodeSet m)) -> Ptr n -> IO (Ptr (NodeSet m))+foreign import ccall xpath_query_evaluate_node_set :: Ptr (XPath NodeSet) -> Ptr n -> IO (Ptr (NodeSet m)) foreign import ccall xpath_query_return_type :: Ptr (XPath a) -> IO XPathType foreign import ccall xpath_query_parse_is_success :: Ptr (XPath a) -> IO CInt@@ -42,7 +48,7 @@ createXPath' :: String -> XPath a createXPath' q = unsafeDupablePerformIO $ createXPath (fromString q) -asNodeSet :: XPath (NodeSet m) -> XPath (NodeSet m)+asNodeSet :: XPath NodeSet -> XPath NodeSet asNodeSet = id asDouble :: XPath Double -> XPath Double@@ -83,23 +89,28 @@ , quoteDec = error "xpath QQ can use as Exp only." } -class EvalXPath a where- evaluateXPath :: NodeLike n => XPath a -> n k m -> IO a+class EvalXPath (a :: poly) where+ type XPathResult a (m :: MutableFlag)+ evaluateXPath :: NodeLike n => XPath a -> n k m -> IO (XPathResult a m) instance EvalXPath Bool where+ type XPathResult Bool m = Bool evaluateXPath (XPath xp) nd = withForeignPtr xp $ \x -> withNode nd $ \n -> toBool <$> xpath_query_evaluate_boolean x n instance EvalXPath Double where+ type XPathResult Double m = Double evaluateXPath (XPath xp) nd = withForeignPtr xp $ \x -> withNode nd $ \n -> realToFrac <$> xpath_query_evaluate_number x n instance EvalXPath S.ByteString where+ type XPathResult S.ByteString m = S.ByteString evaluateXPath (XPath xp) nd = withForeignPtr xp $ \x -> withNode nd $ \n -> do s <- xpath_query_evaluate_string x n S.packCString s <* free s -instance EvalXPath (NodeSet m) where+instance EvalXPath NodeSet where+ type XPathResult NodeSet m = NodeSet m evaluateXPath (XPath xp) nd = withForeignPtr xp $ \x -> withNode nd $ \n -> do s <- xpath_query_evaluate_node_set x n l <- fromIntegral <$> xpath_node_set_size s
+ Text/XML/Pugi/Mutable.hs view
@@ -0,0 +1,367 @@+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE TypeSynonymInstances #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE DeriveFunctor #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE PolyKinds #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE CPP #-}++module Text.XML.Pugi.Mutable+ (+ -- ** setter+ Modify+ , create, modify+ , MutableNodeLike(..)+ , appendAttrs+ , setOrAppendAttr+ -- *** specified append/prepend child+ , appendElement, prependElement+ , appendDeclaration, prependDeclaration+ , appendPCData, prependPCData+ , appendCData, prependCData+ , appendComment, prependComment+ , appendDoctype, prependDoctype+ , appendPi, prependPi+ ) where++import Control.Applicative+import Control.Monad++import Foreign.C.Types++import Text.XML.Pugi hiding (xpath)+import qualified Text.XML.Pugi.Foreign.Document as D+import qualified Text.XML.Pugi.Foreign.Node as N+import qualified Text.XML.Pugi.Foreign.XPath as X++import qualified Data.ByteString as S+import qualified Data.ByteString.Lazy as L++import System.IO.Unsafe+import Unsafe.Coerce++newtype Modify a = Modify { runModify :: IO (Either String a) }+ deriving Functor++instance Applicative Modify where+ pure = Modify . return . Right+ mf <*> ma = Modify $ runModify mf >>= \case+ Left e -> return (Left e)+ Right f -> runModify ma >>= \case+ Left e -> return (Left e)+ Right a -> return (Right (f a))++instance Monad Modify where+ return = pure+ ma >>= g = Modify $ runModify ma >>= \case+ Left e -> return (Left e)+ Right a -> runModify $ g a+ fail = Modify . return . Left++instance Alternative Modify where+ empty = Modify . return $ Left "empty"+ ma <|> mb = Modify $ runModify ma >>= \case+ Left _ -> runModify mb+ Right a -> return $ Right a++instance MonadPlus Modify where+ mzero = empty+ mplus = (<|>)++mLiftIO :: IO a -> Modify a+mLiftIO io = Modify $ Right <$> io++-- | create document from scratch.+create :: Monad m => (MutableDocument -> Modify ()) -> m Document+create m = either fail (return . D.freezeDocument) . unsafeDupablePerformIO . runModify $ do+ d <- mLiftIO D.createDocument+ m d+ return d++-- | modify document.+modify :: Monad m => Document -> (MutableDocument -> Modify ()) -> m Document+modify prt m = either fail (return . D.freezeDocument) . unsafePerformIO . runModify $ do+ d <- mLiftIO $ D.copyDocument prt+ m d+ return d++appendElement :: (HasChildren k, MutableNodeLike n)+ => S.ByteString -> n k Mutable -> Modify (MutableNode Element)+appendElement n e = appendChild nodeTypeElement e >>= \r -> setName n r >> return r++prependElement :: (HasChildren k, MutableNodeLike n)+ => S.ByteString -> n k Mutable -> Modify (MutableNode Element)+prependElement n e = prependChild nodeTypeElement e >>= \r -> setName n r >> return r++appendDeclaration :: (HasChildren k, MutableNodeLike n)+ => S.ByteString -> n k Mutable -> Modify (MutableNode Declaration)+appendDeclaration n e = appendChild nodeTypeDeclaration e >>= \r -> setName n r >> return r++prependDeclaration :: (HasChildren k, MutableNodeLike n)+ => S.ByteString -> n k Mutable -> Modify (MutableNode Declaration)+prependDeclaration n e = prependChild nodeTypeDeclaration e >>= \r -> setName n r >> return r++appendPCData :: (HasChildren k, MutableNodeLike n)+ => S.ByteString -> n k Mutable -> Modify (MutableNode PCData)+appendPCData n e = appendChild nodeTypePCData e >>= \r -> setValue n r >> return r++prependPCData :: (HasChildren k, MutableNodeLike n)+ => S.ByteString -> n k Mutable -> Modify (MutableNode PCData)+prependPCData n e = prependChild nodeTypePCData e >>= \r -> setValue n r >> return r++appendCData :: (HasChildren k, MutableNodeLike n)+ => S.ByteString -> n k Mutable -> Modify (MutableNode CData)+appendCData n e = appendChild nodeTypeCData e >>= \r -> setValue n r >> return r++prependCData :: (HasChildren k, MutableNodeLike n)+ => S.ByteString -> n k Mutable -> Modify (MutableNode CData)+prependCData n e = prependChild nodeTypeCData e >>= \r -> setValue n r >> return r++appendComment :: (HasChildren k, MutableNodeLike n)+ => S.ByteString -> n k Mutable -> Modify (MutableNode Comment)+appendComment n e = appendChild nodeTypeComment e >>= \r -> setValue n r >> return r++prependComment :: (HasChildren k, MutableNodeLike n)+ => S.ByteString -> n k Mutable -> Modify (MutableNode Comment)+prependComment n e = prependChild nodeTypeComment e >>= \r -> setValue n r >> return r++appendDoctype :: (HasChildren k, MutableNodeLike n)+ => S.ByteString -> n k Mutable -> Modify (MutableNode Doctype)+appendDoctype n e = appendChild nodeTypeDoctype e >>= \r -> setValue n r >> return r++prependDoctype :: (HasChildren k, MutableNodeLike n)+ => S.ByteString -> n k Mutable -> Modify (MutableNode Doctype)+prependDoctype n e = prependChild nodeTypeDoctype e >>= \r -> setValue n r >> return r++appendPi :: (HasChildren k, MutableNodeLike n)+ => S.ByteString -> S.ByteString -> n k Mutable -> Modify (MutableNode Pi)+appendPi n v e = appendChild nodeTypePi e >>= \r -> setName n r >> setValue v r >> return r++prependPi :: (HasChildren k, MutableNodeLike n)+ => S.ByteString -> S.ByteString -> n k Mutable -> Modify (MutableNode Pi)+prependPi n v e = prependChild nodeTypePi e >>= \r -> setName n r >> setValue v r >> return r++class MutableNodeLike (n :: NodeKind -> MutableFlag -> *) where+ asNode :: n k Mutable -> Modify (Node_ k Mutable)+ nodeEqual :: n k Mutable -> n l o -> Modify Bool+ forgetNodeKind :: n k Mutable -> n Unknown Mutable+ forgetNodeKind = unsafeCoerce+ {-# INLINE forgetNodeKind #-}+ prettyNode :: D.PrettyConfig -> Int -> n k Mutable -> Modify L.ByteString+ hashValue :: n k Mutable -> Modify CSize+ nodeType :: n k Mutable -> Modify NodeType+ getName :: HasName k => n k Mutable -> Modify S.ByteString+ getValue :: HasValue k => n k Mutable -> Modify S.ByteString+ parent :: n k Mutable -> Modify (Maybe (MutableNode Unknown))+ firstChild :: HasChildren k => n k Mutable -> Modify (Maybe (MutableNode Unknown))+ lastChild :: HasChildren k => n k Mutable -> Modify (Maybe (MutableNode Unknown))+ nextSibling :: n k Mutable -> Modify (Maybe (MutableNode Unknown))+ prevSibling :: n k Mutable -> Modify (Maybe (MutableNode Unknown))+ child :: HasChildren k => S.ByteString -> n k Mutable -> Modify (Maybe (MutableNode Unknown))+ attribute :: HasAttribute k => S.ByteString -> n k Mutable -> Modify (Maybe S.ByteString)+ nextSiblingByName :: S.ByteString -> n k Mutable -> Modify (Maybe (MutableNode Unknown))+ prevSiblingByName :: S.ByteString -> n k Mutable -> Modify (Maybe (MutableNode Unknown))+ findChildByNameAndAttr :: HasChildren k+ => S.ByteString -- ^ node name+ -> S.ByteString -- ^ attribute name+ -> S.ByteString -- ^ attribute value+ -> n k Mutable -> Modify (Maybe (MutableNode Unknown))+ findChildByAttr :: HasChildren k+ => S.ByteString -- ^ attribute name+ -> S.ByteString -- ^ attribute value+ -> n k Mutable -> Modify (Maybe (MutableNode Unknown))+ childValue :: HasChildren k => n k Mutable -> Modify S.ByteString+ childValueByName :: HasChildren k => S.ByteString -> n k Mutable -> Modify S.ByteString+ text :: n k Mutable -> Modify S.ByteString++ -- | find attribute by predicate. since v0.2.0.+ findAttribute :: (S.ByteString -> S.ByteString -> Bool) -> n k Mutable -> Modify (Maybe Attribute)++ -- | find child by predicate. since v0.2.0.+ findChild :: (Node -> Bool) -> n k Mutable -> Modify (Maybe (MutableNode Unknown))++ -- | find node by predicate. since v0.2.0.+ findNode :: (Node -> Bool) -> n k Mutable -> Modify (Maybe (MutableNode Unknown))+ path :: Char -> n k Mutable -> Modify S.ByteString+ firstElementByPath :: Char -> S.ByteString -> n k Mutable -> Modify (Maybe (MutableNode Unknown))+ root :: n k Mutable -> Modify (Maybe (MutableNode Unknown))+ evaluate :: X.EvalXPath r => XPath r -> n k Mutable -> Modify (X.XPathResult r Mutable)+ selectSingleNode :: XPath NodeSet -> n k Mutable -> Modify (XPathNode Mutable)+ selectNodes :: XPath NodeSet -> n k Mutable -> Modify (NodeSet Mutable)++ setName :: HasName k => S.ByteString -> n k Mutable -> Modify ()+ setValue :: HasValue k => S.ByteString -> n k Mutable -> Modify ()+ appendAttr :: HasAttribute k => S.ByteString -> S.ByteString -> n k Mutable -> Modify ()+ prependAttr :: HasAttribute k => S.ByteString -> S.ByteString -> n k Mutable -> Modify ()+ setAttr :: HasAttribute k => S.ByteString -> S.ByteString -> n k Mutable -> Modify ()+ -- | generic appendChild method. Recommend to use 'appendElement' etc...+ appendChild :: HasChildren k => NodeType -> n k Mutable -> Modify (MutableNode l)+ -- | generic prependChild method. Recommend to use 'prependElement' etc...+ prependChild :: HasChildren k => NodeType -> n k Mutable -> Modify (MutableNode l)+ appendCopy :: HasChildren k => Node_ k a -> n l Mutable -> Modify (MutableNode k)+ prependCopy :: HasChildren k => Node_ k a -> n l Mutable -> Modify (MutableNode k)+ removeAttr :: HasAttribute k => S.ByteString -> n k Mutable -> Modify ()+ removeChild :: HasChildren k => Node_ k a -> n l Mutable -> Modify ()+ appendFlagment :: HasChildren k => D.ParseConfig -> S.ByteString -> n k Mutable -> Modify ()++ mapSiblingM :: (MutableNode Unknown -> Modify a) -> n k Mutable -> Modify [a]+ mapSiblingM_ :: (MutableNode Unknown -> Modify a) -> n k Mutable -> Modify ()++appendAttrs :: (MutableNodeLike n, HasAttribute k) => [Attribute] -> n k Mutable -> Modify ()+appendAttrs as n = mapM_ (\(k,v) -> appendAttr k v n) as++instance MutableNodeLike Node_ where+ asNode = Modify . fmap Right . N.asNode+ nodeEqual a = Modify . fmap Right . N.nodeEqual a+ prettyNode cfg dph = Modify . fmap Right . N.prettyNode cfg dph+ hashValue = Modify . fmap Right . N.hashValue+ nodeType = Modify . fmap Right . N.nodeType+ getName = Modify . fmap Right . N.getName+ getValue = Modify . fmap Right . N.getValue+ parent = Modify . fmap Right . N.parent+ firstChild = Modify . fmap Right . N.firstChild+ lastChild = Modify . fmap Right . N.lastChild+ nextSibling = Modify . fmap Right . N.nextSibling+ prevSibling = Modify . fmap Right . N.prevSibling+ child n = Modify . fmap Right . N.child n+ attribute n = Modify . fmap Right . N.attribute n+ nextSiblingByName n = Modify . fmap Right . N.nextSiblingByName n+ prevSiblingByName n = Modify . fmap Right . N.prevSiblingByName n+ findChildByNameAndAttr nn an av =+ Modify . fmap Right . N.findChildByNameAndAttr nn an av+ findChildByAttr an av = Modify . fmap Right . N.findChildByAttr an av+ childValue = Modify . fmap Right . N.childValue+ childValueByName n = Modify . fmap Right . N.childValueByName n+ text = Modify . fmap Right . N.text+ findAttribute f = Modify . fmap Right . N.findAttribute f+ findChild f = Modify . fmap Right . N.findChild f+ findNode f = Modify . fmap Right . N.findNode f+ path c = Modify . fmap Right . N.path c+ firstElementByPath c p = Modify . fmap Right . N.firstElementByPath c p+ root = Modify . fmap Right . N.root+ evaluate x = Modify . fmap Right . X.evaluateXPath x+ selectSingleNode x = Modify . fmap Right . N.selectSingleNode x+ selectNodes x = Modify . fmap Right . N.selectNodes x++ setName = isetName+ setValue = isetValue+ appendAttr = iappendAttr+ prependAttr = iprependAttr+ setAttr = isetAttr+ appendChild = iappendChild+ prependChild = iprependChild+ appendCopy = iappendCopy+ prependCopy = iprependCopy+ removeAttr = iremoveAttr+ removeChild = iremoveChild+ appendFlagment = iappendFlagment++ mapSiblingM f = Modify . fmap sequence . N.mapSiblingM (runModify . f)+ mapSiblingM_ f = Modify . fmap sequence_ . N.mapSiblingM (runModify . f)++instance MutableNodeLike Document_ where+ asNode = Modify . fmap Right . N.asNode+ nodeEqual a = Modify . fmap Right . N.nodeEqual a+ prettyNode cfg dph = Modify . fmap Right . N.prettyNode cfg dph+ hashValue = Modify . fmap Right . N.hashValue+ nodeType = Modify . fmap Right . N.nodeType+ getName = Modify . fmap Right . N.getName+ getValue = Modify . fmap Right . N.getValue+ parent = Modify . fmap Right . N.parent+ firstChild = Modify . fmap Right . N.firstChild+ lastChild = Modify . fmap Right . N.lastChild+ nextSibling = Modify . fmap Right . N.nextSibling+ prevSibling = Modify . fmap Right . N.prevSibling+ child n = Modify . fmap Right . N.child n+ attribute n = Modify . fmap Right . N.attribute n+ nextSiblingByName n = Modify . fmap Right . N.nextSiblingByName n+ prevSiblingByName n = Modify . fmap Right . N.prevSiblingByName n+ findChildByNameAndAttr nn an av =+ Modify . fmap Right . N.findChildByNameAndAttr nn an av+ findChildByAttr an av = Modify . fmap Right . N.findChildByAttr an av+ childValue = Modify . fmap Right . N.childValue+ childValueByName n = Modify . fmap Right . N.childValueByName n+ text = Modify . fmap Right . N.text+ findAttribute f = Modify . fmap Right . N.findAttribute f+ findChild f = Modify . fmap Right . N.findChild f+ findNode f = Modify . fmap Right . N.findNode f+ path c = Modify . fmap Right . N.path c+ firstElementByPath c p = Modify . fmap Right . N.firstElementByPath c p+ root = Modify . fmap Right . N.root+ evaluate x = Modify . fmap Right . X.evaluateXPath x+ selectSingleNode x = Modify . fmap Right . N.selectSingleNode x+ selectNodes x = Modify . fmap Right . N.selectNodes x++ setName = isetName+ setValue = isetValue+ appendAttr = iappendAttr+ prependAttr = iprependAttr+ setAttr = isetAttr+ appendChild = iappendChild+ prependChild = iprependChild+ appendCopy = iappendCopy+ prependCopy = iprependCopy+ removeAttr = iremoveAttr+ removeChild = iremoveChild+ appendFlagment = iappendFlagment++ mapSiblingM f = Modify . fmap sequence . N.mapSiblingM (runModify . f)+ mapSiblingM_ f = Modify . fmap sequence_ . N.mapSiblingM (runModify . f)++setOrAppendAttr :: (HasAttribute k, MutableNodeLike n)+ => S.ByteString -> S.ByteString -> n k Mutable -> Modify ()+setOrAppendAttr k v n = setAttr k v n <|> appendAttr k v n++isetName :: N.NodeLike n => S.ByteString -> n k Mutable -> Modify ()+isetName n nd = mLiftIO (N.setName n nd) >>= + flip unless (fail $ "setName: " ++ show n)++isetValue :: N.NodeLike n => S.ByteString -> n k Mutable -> Modify ()+isetValue n nd = mLiftIO (N.setValue n nd) >>=+ flip unless (fail $ "setValue: " ++ show n)++iappendAttr :: N.NodeLike n => S.ByteString -> S.ByteString+ -> n k Mutable -> Modify ()+iappendAttr k v n = mLiftIO (N.appendAttr k v n) >>=+ flip unless (fail $ "appendAttr: " ++ show k ++ " = " ++ show v)++iprependAttr :: N.NodeLike n => S.ByteString -> S.ByteString+ -> n k Mutable -> Modify ()+iprependAttr k v n = mLiftIO (N.prependAttr k v n) >>=+ flip unless (fail $ "appendAttr: " ++ show k ++ " = " ++ show v)++isetAttr :: N.NodeLike n => S.ByteString -> S.ByteString+ -> n k Mutable -> Modify ()+isetAttr k v n = mLiftIO (N.setAttr k v n) >>=+ flip unless (fail $ "setAttr: " ++ show k ++ " = " ++ show v)++iappendChild :: N.NodeLike n => NodeType -> n l Mutable -> Modify (MutableNode k)+iappendChild t n = mLiftIO (N.appendChild t n) >>=+ maybe (fail $ "appendChild: " ++ show t) return++iprependChild :: N.NodeLike n => NodeType -> n l Mutable -> Modify (MutableNode k)+iprependChild t n = mLiftIO (N.prependChild t n) >>=+ maybe (fail $ "prependChild: " ++ show t) return++iappendCopy :: N.NodeLike n => Node_ k a -> n l Mutable -> Modify (MutableNode k)+iappendCopy t n = mLiftIO (N.appendCopy t n) >>=+ maybe (fail "appendCopy") return++iprependCopy :: N.NodeLike n => Node_ k a -> n l Mutable -> Modify (MutableNode k)+iprependCopy t n = mLiftIO (N.prependCopy t n) >>=+ maybe (fail "prependCopy") return++iremoveAttr :: N.NodeLike n => S.ByteString -> n k Mutable -> Modify ()+iremoveAttr n nd = mLiftIO (N.removeAttr n nd) >>=+ flip unless (fail $ "removeAttr: " ++ show n)++iremoveChild :: N.NodeLike n => Node_ l a -> n k Mutable -> Modify ()+iremoveChild n nd = mLiftIO (N.removeChild n nd) >>=+ flip unless (fail "removeChild")++iappendFlagment :: N.NodeLike n => D.ParseConfig -> S.ByteString -> n k Mutable -> Modify ()+iappendFlagment cfg str n = mLiftIO (N.appendBuffer cfg str n) >>=+ flip unless (fail $ "appendFlagment: " ++ show str)
pugixml.cabal view
@@ -1,5 +1,5 @@ name: pugixml-version: 0.2.0+version: 0.3.0 synopsis: pugixml binding. description: pugixml binding. example: <Text-XML-Pugi.html> license: MIT@@ -17,6 +17,7 @@ library exposed-modules: Text.XML.Pugi+ Text.XML.Pugi.Mutable Text.XML.Pugi.Const other-modules: Text.XML.Pugi.Foreign.Const Text.XML.Pugi.Foreign.Node