packages feed

pugixml 0.3.0 → 0.3.1

raw patch · 10 files changed

+211/−186 lines, 10 filesdep ~basedep ~template-haskell

Dependency ranges changed: base, template-haskell

Files

Text/XML/Pugi.hs view
@@ -10,6 +10,8 @@ {-# LANGUAGE DataKinds #-} {-# LANGUAGE CPP #-} +{-# OPTIONS_GHC -fno-warn-orphans #-}+ -- | import/langauge -- -- @@@ -163,67 +165,67 @@ pretty :: D.PrettyConfig -> Document -> L.ByteString pretty cfg doc = unsafeDupablePerformIO $ D.pretty cfg doc -instance Show (Node_ k Immutable) where+instance Show (Node_ k 'Immutable) where     show = ("Node " ++) . L8.unpack . prettyNode def {D.prettyFlags = formatRaw} 0 -instance Show (Document_ k Immutable) where+instance Show (Document_ k 'Immutable) where     show = ("Document " ++) . L8.unpack . prettyNode def {D.prettyFlags = formatRaw} 0 -instance Eq (Node_ k Immutable) where+instance Eq (Node_ k 'Immutable) where     (==) = nodeEqual -instance Eq (Document_ k Immutable) where+instance Eq (Document_ k 'Immutable) where     (==) = nodeEqual  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+    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 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+    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 Immutable -> Maybe Node+                           -> n k 'Immutable -> Maybe Node     findChildByAttr        :: HasChildren k                            => S.ByteString -- ^ attribute name                            -> S.ByteString -- ^ attribute value-                           -> 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+                           -> 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 Immutable -> 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 Immutable -> Maybe Node+    findChild              :: (Node -> Bool) -> n k 'Immutable -> Maybe Node      -- | find node by predicate. since v0.2.0.-    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+    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_ where     asNode              = unsafeDupablePerformIO . N.asNode@@ -296,27 +298,27 @@     selectNodes x          = unsafeDupablePerformIO . N.selectNodes x  class HasName (k :: NodeKind)-instance HasName Element-instance HasName Declaration-instance HasName Pi-instance HasName Unknown+instance HasName 'Element+instance HasName 'Declaration+instance HasName 'Pi+instance HasName 'Unknown  class HasValue (k :: NodeKind)-instance HasValue PCData-instance HasValue CData-instance HasValue Comment-instance HasValue Doctype-instance HasValue Pi-instance HasValue Unknown+instance HasValue 'PCData+instance HasValue 'CData+instance HasValue 'Comment+instance HasValue 'Doctype+instance HasValue 'Pi+instance HasValue 'Unknown  class HasAttribute (k :: NodeKind)-instance HasAttribute Element-instance HasAttribute Declaration-instance HasAttribute Unknown+instance HasAttribute 'Element+instance HasAttribute 'Declaration+instance HasAttribute 'Unknown  class HasChildren (k :: NodeKind)-instance HasChildren Element-instance HasChildren Unknown+instance HasChildren 'Element+instance HasChildren 'Unknown  nodeSetIndex :: NodeSet m -> Int -> XPathNode m nodeSetIndex n = unsafeDupablePerformIO . X.nodeSetIndex n@@ -327,10 +329,10 @@ nodeSetToList :: NodeSet m -> [XPathNode m] nodeSetToList = nodeSetMap id -asMutable :: N.NodeLike n => n k Mutable -> n k Mutable+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 :: N.NodeLike n => n k 'Immutable -> n k 'Immutable asImmutable = id {-# INLINE asImmutable #-}
Text/XML/Pugi/Foreign/Const.hs view
@@ -1,4 +1,6 @@ {-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE CPP #-}+ module Text.XML.Pugi.Foreign.Const where  import Foreign.C@@ -6,7 +8,10 @@ import Data.Default.Class import Data.Bits import Data.List++#if !MIN_VERSION_base(4,8,0) import Data.Monoid+#endif  foreign import ccall unsafe pugixml_version :: CInt 
Text/XML/Pugi/Foreign/Document.hs view
@@ -1,10 +1,14 @@ {-# LANGUAGE ForeignFunctionInterface #-} {-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE CPP #-}+ module Text.XML.Pugi.Foreign.Document where -import Control.Applicative import Control.Monad import Control.Exception+#if !MIN_VERSION_base(4,8,0)+import Control.Applicative+#endif  import Foreign.C import Foreign.Ptr
Text/XML/Pugi/Foreign/Node.hs view
@@ -1,14 +1,18 @@ {-# LANGUAGE ForeignFunctionInterface #-}-{-# LANGUAGE ImpredicativeTypes #-}-{-# LANGUAGE Rank2Types #-}-{-# LANGUAGE DataKinds #-}-{-# LANGUAGE KindSignatures #-} {-# LANGUAGE TypeSynonymInstances #-}+{-# LANGUAGE ImpredicativeTypes #-} {-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE KindSignatures #-}+{-# LANGUAGE Rank2Types #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE CPP #-}+ module Text.XML.Pugi.Foreign.Node where +#if !MIN_VERSION_base(4,8,0) import Control.Applicative+#endif import Control.Monad import Control.Exception @@ -43,18 +47,18 @@ foreign import ccall node_name  :: Ptr n -> IO CString foreign import ccall node_value :: Ptr n -> IO CString -foreign import ccall node_parent           :: Ptr n -> IO (Ptr (Node_ Unknown a))-foreign import ccall node_first_child      :: Ptr n -> IO (Ptr (Node_ Unknown a))-foreign import ccall node_last_child       :: Ptr n -> IO (Ptr (Node_ Unknown a))-foreign import ccall node_next_sibling     :: Ptr n -> IO (Ptr (Node_ Unknown a))-foreign import ccall node_previous_sibling :: Ptr n -> IO (Ptr (Node_ Unknown a))+foreign import ccall node_parent           :: Ptr n -> IO (Ptr (Node_ 'Unknown a))+foreign import ccall node_first_child      :: Ptr n -> IO (Ptr (Node_ 'Unknown a))+foreign import ccall node_last_child       :: Ptr n -> IO (Ptr (Node_ 'Unknown a))+foreign import ccall node_next_sibling     :: Ptr n -> IO (Ptr (Node_ 'Unknown a))+foreign import ccall node_previous_sibling :: Ptr n -> IO (Ptr (Node_ 'Unknown a)) -foreign import ccall node_child :: Ptr n -> CString -> IO (Ptr (Node_ Unknown a))+foreign import ccall node_child :: Ptr n -> CString -> IO (Ptr (Node_ 'Unknown a)) foreign import ccall node_attribute :: Ptr n -> CString -> IO (Ptr Attr)-foreign import ccall node_next_sibling_by_name :: Ptr n -> CString -> IO (Ptr (Node_ Unknown a))-foreign import ccall node_previous_sibling_by_name :: Ptr n -> CString -> IO (Ptr (Node_ Unknown a))-foreign import ccall node_find_child_by_name_and_attribute :: Ptr n -> CString -> CString -> CString -> IO (Ptr (Node_ Unknown a))-foreign import ccall node_find_child_by_attribute :: Ptr n -> CString -> CString -> IO (Ptr (Node_ Unknown a))+foreign import ccall node_next_sibling_by_name :: Ptr n -> CString -> IO (Ptr (Node_ 'Unknown a))+foreign import ccall node_previous_sibling_by_name :: Ptr n -> CString -> IO (Ptr (Node_ 'Unknown a))+foreign import ccall node_find_child_by_name_and_attribute :: Ptr n -> CString -> CString -> CString -> IO (Ptr (Node_ 'Unknown a))+foreign import ccall node_find_child_by_attribute :: Ptr n -> CString -> CString -> IO (Ptr (Node_ 'Unknown a))  foreign import ccall node_child_value :: Ptr n -> IO CString foreign import ccall node_child_value_by_name :: Ptr n -> CString -> IO CString@@ -74,8 +78,8 @@ foreign import ccall find_child     :: Ptr n -> FunPtr NodePred -> IO (Ptr (Node_ k m)) foreign import ccall find_node      :: Ptr n -> FunPtr NodePred -> IO (Ptr (Node_ k m)) -type BeginEnd m = Ptr (Node_ Unknown m) -> IO CInt-type ForEach  m = CInt -> Ptr (Node_ Unknown m) -> IO CInt+type BeginEnd m = Ptr (Node_ 'Unknown m) -> IO CInt+type ForEach  m = CInt -> Ptr (Node_ 'Unknown m) -> IO CInt foreign import ccall "wrapper" wrap_begin_end :: BeginEnd m -> IO (FunPtr (BeginEnd m)) foreign import ccall "wrapper" wrap_for_each  :: ForEach  m -> IO (FunPtr (ForEach  m)) @@ -85,9 +89,9 @@  foreign import ccall node_path :: Ptr n -> CChar -> IO CString -- must be free -foreign import ccall node_first_element_by_path :: Ptr n -> CString -> CChar -> IO (Ptr (Node_ Unknown a))+foreign import ccall node_first_element_by_path :: Ptr n -> CString -> CChar -> IO (Ptr (Node_ 'Unknown a)) -foreign import ccall node_root :: Ptr n -> IO (Ptr (Node_ Unknown a))+foreign import ccall node_root :: Ptr n -> IO (Ptr (Node_ 'Unknown a))  foreign import ccall set_name  :: Ptr n -> CString -> IO CInt foreign import ccall set_value :: Ptr n -> CString -> IO CInt@@ -149,18 +153,18 @@     getValue :: n k m -> IO S.ByteString     getValue n = withNode n $ node_value >=> S.packCString -    parent :: n k m -> IO (Maybe (Node_ Unknown m))+    parent :: n k m -> IO (Maybe (Node_ 'Unknown m))     parent n = nodeCommon n node_parent-    firstChild :: n k m -> IO (Maybe (Node_ Unknown m))+    firstChild :: n k m -> IO (Maybe (Node_ 'Unknown m))     firstChild n = nodeCommon n node_first_child-    lastChild :: n k m -> IO (Maybe (Node_ Unknown m))+    lastChild :: n k m -> IO (Maybe (Node_ 'Unknown m))     lastChild n = nodeCommon n node_last_child-    nextSibling :: n k m -> IO (Maybe (Node_ Unknown m))+    nextSibling :: n k m -> IO (Maybe (Node_ 'Unknown m))     nextSibling n = nodeCommon n node_next_sibling-    prevSibling :: n k m -> IO (Maybe (Node_ Unknown m))+    prevSibling :: n k m -> IO (Maybe (Node_ 'Unknown m))     prevSibling n = nodeCommon n node_previous_sibling -    child :: S.ByteString -> n k m -> IO (Maybe (Node_ Unknown m))+    child :: S.ByteString -> n k m -> IO (Maybe (Node_ 'Unknown m))     child nm n = nodeCommon n $ \p -> S.useAsCString nm $ node_child p      attribute :: S.ByteString -> n k m -> IO (Maybe S.ByteString)@@ -170,22 +174,22 @@         then return Nothing         else fmap Just $ attr_value attr >>= S.packCString -    nextSiblingByName :: S.ByteString -> n k m -> IO (Maybe (Node_ Unknown m))+    nextSiblingByName :: S.ByteString -> n k m -> IO (Maybe (Node_ 'Unknown m))     nextSiblingByName nm n = nodeCommon n $ \p -> S.useAsCString nm $ node_next_sibling_by_name p-    prevSiblingByName :: S.ByteString -> n k m -> IO (Maybe (Node_ Unknown m))+    prevSiblingByName :: S.ByteString -> n k m -> IO (Maybe (Node_ 'Unknown m))     prevSiblingByName nm n = nodeCommon n $ \p -> S.useAsCString nm $ node_previous_sibling_by_name p      findChildByNameAndAttr :: S.ByteString -- ^ node name                            -> S.ByteString -- ^ attribute name                            -> S.ByteString -- ^ attribute value-                           -> n k m -> IO (Maybe (Node_ Unknown m))+                           -> n k m -> IO (Maybe (Node_ 'Unknown m))     findChildByNameAndAttr nn an av n = nodeCommon n $ \p ->         S.useAsCString nn $ \nn' -> S.useAsCString an $ \an' -> S.useAsCString av $ \av' ->         node_find_child_by_name_and_attribute p nn' an' av'      findChildByAttr :: S.ByteString -- ^ attribute name                     -> S.ByteString -- ^ attribute value-                    -> n k m -> IO (Maybe (Node_ Unknown m))+                    -> n k m -> IO (Maybe (Node_ 'Unknown m))     findChildByAttr an av n = nodeCommon n $ \p ->         S.useAsCString an $ \an' -> S.useAsCString av $ \av' ->         node_find_child_by_attribute p an' av'@@ -207,13 +211,13 @@             then return Nothing             else fmap Just $ (,) <$> (S.packCString =<< attr_name attr) <*> (S.packCString =<< attr_value attr) -    findChild :: (Node -> Bool) -> n k m -> IO (Maybe (Node_ Unknown m))+    findChild :: (Node -> Bool) -> n k m -> IO (Maybe (Node_ 'Unknown m))     findChild f nd = nodeCommon nd $ \n -> with_node_pred f $ find_child n -    findNode :: (Node -> Bool) -> n k m -> IO (Maybe (Node_ Unknown m))+    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 b) -> 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)         bracket (wrap_node_mapper f) freeHaskellFunPtr $ node_map_sibling p@@ -230,53 +234,53 @@     path del node = withNode node $ \p ->         bracket (node_path p (fromIntegral $ c2w del)) free $ S.packCString -    firstElementByPath :: Char -> S.ByteString -> n k m -> IO (Maybe (Node_ Unknown m))+    firstElementByPath :: Char -> S.ByteString -> n k m -> IO (Maybe (Node_ 'Unknown m))     firstElementByPath del path_ node = nodeCommon node $ \p ->         S.useAsCString path_ $ \d -> node_first_element_by_path p d (fromIntegral $ c2w del) -    root :: n k m -> IO (Maybe (Node_ Unknown m))+    root :: n k m -> IO (Maybe (Node_ 'Unknown m))     root node = nodeCommon node $ node_root -    setName :: S.ByteString -> n k Mutable -> IO Bool+    setName :: S.ByteString -> n k 'Mutable -> IO Bool     setName n node = withNode node $ \p -> S.useAsCString n $ \q ->         toBool <$> set_name p q-    setValue :: S.ByteString -> n k Mutable -> IO Bool+    setValue :: S.ByteString -> n k 'Mutable -> IO Bool     setValue n node = withNode node $ \p -> S.useAsCString n $ \q ->         toBool <$> set_value p q -    appendAttr :: S.ByteString -> S.ByteString -> n k Mutable -> IO Bool+    appendAttr :: S.ByteString -> S.ByteString -> n k 'Mutable -> IO Bool     appendAttr k v n = withNode n $ \np -> S.useAsCString k $ \kp -> S.useAsCString v $ \vp ->         toBool <$> append_attribute np kp vp-    prependAttr :: S.ByteString -> S.ByteString -> n k Mutable -> IO Bool+    prependAttr :: S.ByteString -> S.ByteString -> n k 'Mutable -> IO Bool     prependAttr k v n = withNode n $ \np -> S.useAsCString k $ \kp -> S.useAsCString v $ \vp ->         toBool <$> prepend_attribute np kp vp -    setAttr :: S.ByteString -> S.ByteString -> n k Mutable -> IO Bool+    setAttr :: S.ByteString -> S.ByteString -> n k 'Mutable -> IO Bool     setAttr k v n = withNode n $ \np -> S.useAsCString k $ \kp ->         bracket (node_attribute np kp) delete_attr $ \attr ->             if attr == nullPtr                 then return False                 else toBool <$> S.useAsCString v (attr_set_value attr) -    appendChild :: NodeType -> n k Mutable -> IO (Maybe (Node_ l Mutable))+    appendChild :: NodeType -> n k 'Mutable -> IO (Maybe (Node_ l 'Mutable))     appendChild t n = nodeCommon n $ \p -> append_child p t-    prependChild :: NodeType -> n k Mutable -> IO (Maybe (Node_ l Mutable))+    prependChild :: NodeType -> n k 'Mutable -> IO (Maybe (Node_ l 'Mutable))     prependChild t n = nodeCommon n $ \p -> prepend_child p t -    appendCopy :: Node_ k a -> n l Mutable -> IO (Maybe (Node_ k Mutable))+    appendCopy :: Node_ k a -> n l 'Mutable -> IO (Maybe (Node_ k 'Mutable))     appendCopy t n = nodeCommon n $ \p -> withNode t (append_copy p)-    prependCopy :: Node_ k a -> n l Mutable -> IO (Maybe (Node_ k Mutable))+    prependCopy :: Node_ k a -> n l 'Mutable -> IO (Maybe (Node_ k 'Mutable))     prependCopy t n = nodeCommon n $ \p -> withNode t (prepend_copy p) -    removeAttr :: S.ByteString -> n k Mutable -> IO Bool+    removeAttr :: S.ByteString -> n k 'Mutable -> IO Bool     removeAttr a n = withNode n $ \p -> S.useAsCString a $ \c ->         toBool <$> remove_attribute p c -    removeChild :: Node_ k a -> n l Mutable -> IO Bool+    removeChild :: Node_ k a -> n l 'Mutable -> IO Bool     removeChild c n = withNode n $ \p -> withNode c $ \q ->         toBool <$> remove_child p q -    appendBuffer :: ParseConfig -> S.ByteString -> n k Mutable -> IO Bool+    appendBuffer :: ParseConfig -> S.ByteString -> n k 'Mutable -> IO Bool     appendBuffer (ParseConfig (ParseFlags flags) enc) str node = fmap toBool $         withNode node $ \n -> S.unsafeUseAsCStringLen str $ \(c,l) ->         bracket (append_buffer n c (fromIntegral l) flags enc) delete_parse_result@@ -304,7 +308,7 @@  -- xpath_node foreign import ccall delete_xpath_node :: Ptr XNode -> IO ()-foreign import ccall xpath_node_node :: Ptr XNode -> IO (Ptr (Node_ Unknown m))+foreign import ccall xpath_node_node :: Ptr XNode -> IO (Ptr (Node_ 'Unknown m)) foreign import ccall xpath_node_attribute :: Ptr XNode -> IO (Ptr Attr)  foreign import ccall "&delete_xpath_node_set" finalizerXpathNodeSet :: FinalizerPtr (NodeSet m)@@ -321,7 +325,7 @@         else Left . Node <$> newForeignPtr finalizerNode n  -mapSiblingM :: NodeLike n => (Node_ Unknown m -> IO a) -> n l m -> IO [a]+mapSiblingM :: NodeLike n => (Node_ 'Unknown m -> IO a) -> n l m -> IO [a] mapSiblingM func node = do     ref <- newIORef id     mapSiblingM_ (\n -> func n >>= \a -> modifyIORef ref (\f -> f . (a:))) node
Text/XML/Pugi/Foreign/Types.hs view
@@ -20,12 +20,12 @@               | Unknown  newtype Document_ (k :: NodeKind) (m :: MutableFlag) = Document (ForeignPtr (Document_ k m))-type Document = Document_ Unknown Immutable-type MutableDocument = Document_ Unknown Mutable+type Document = Document_ 'Unknown 'Immutable+type MutableDocument = Document_ 'Unknown 'Mutable  newtype Node_ (k :: NodeKind) (m :: MutableFlag) = Node (ForeignPtr (Node_ k m))-type Node = Node_ Unknown Immutable-type MutableNode k = Node_ k Mutable+type Node = Node_ 'Unknown 'Immutable+type MutableNode k = Node_ k 'Mutable  newtype ParseResult = ParseResult (Ptr ParseResult) @@ -38,4 +38,4 @@ data Attr data XNode type Attribute = (S.ByteString, S.ByteString)-type XPathNode m = Either (Node_ Unknown m) Attribute+type XPathNode m = Either (Node_ 'Unknown m) Attribute
Text/XML/Pugi/Foreign/XPath.hs view
@@ -7,13 +7,16 @@ {-# LANGUAGE LambdaCase #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE PolyKinds #-}+{-# LANGUAGE CPP #-}  module Text.XML.Pugi.Foreign.XPath where  import Language.Haskell.TH import Language.Haskell.TH.Quote +#if !MIN_VERSION_base(4,8,0) import Control.Applicative+#endif import Control.Exception  import Foreign.ForeignPtr
Text/XML/Pugi/Foreign/XPath/Node.hs view
@@ -1,7 +1,11 @@ {-# LANGUAGE ForeignFunctionInterface #-}+{-# LANGUAGE CPP #-}+ module Text.XML.Pugi.Foreign.XPath.Node where +#if !MIN_VERSION_base(4,8,0) import Control.Applicative+#endif import Control.Exception  import Foreign.ForeignPtr
Text/XML/Pugi/Mutable.hs view
@@ -89,128 +89,128 @@     return d  appendElement :: (HasChildren k, MutableNodeLike n)-              => S.ByteString -> n k Mutable -> Modify (MutableNode Element)+              => 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)+               => 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)+                  => 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)+                   => 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)+             => 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)+              => 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)+            => 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)+             => 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)+              => 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)+               => 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)+              => 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)+               => 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)+         => 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)+          => 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+    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))+    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))+                           -> 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+                           -> 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)+    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))+    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)+    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 ()+    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)+    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 ()+    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 ()+    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 :: (MutableNodeLike n, HasAttribute k) => [Attribute] ->  n k 'Mutable -> Modify () appendAttrs as n = mapM_ (\(k,v) -> appendAttr k v n) as  instance MutableNodeLike Node_ where@@ -312,56 +312,56 @@     mapSiblingM_ f = Modify . fmap sequence_ . N.mapSiblingM (runModify . f)  setOrAppendAttr :: (HasAttribute k, MutableNodeLike n)-                => S.ByteString -> S.ByteString -> n k Mutable -> Modify ()+                => 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.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.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 ()+            -> 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 ()+             -> 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 ()+         -> 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 :: 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 :: 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 :: 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 :: 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.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.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 :: 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,14 +1,14 @@ name:                pugixml-version:             0.3.0+version:             0.3.1 synopsis:            pugixml binding.-description:         pugixml binding. example: <Text-XML-Pugi.html>+description:         pugixml binding. example: <docs/Text-XML-Pugi.html> license:             MIT license-file:        LICENSE author:              HirotomoMoriwaki<philopon.dependence@gmail.com> maintainer:          HirotomoMoriwaki<philopon.dependence@gmail.com> Homepage:            https://github.com/philopon/pugixml-hs Bug-reports:         https://github.com/philopon/pugixml-hs/issues-copyright:           (c) 2014 Hirotomo Moriwaki+copyright:           (c) 2014-2015 Hirotomo Moriwaki category:            Text, XML build-type:          Simple extra-source-files:  pugixml-1.4/pugiconfig.hpp@@ -28,10 +28,10 @@                        Text.XML.Pugi.Foreign.Attr   -- other-modules:          -- other-extensions:    -  build-depends:       base               >=4.6  && <4.8+  build-depends:       base               >=4.6  && <4.9                      , bytestring         >=0.10 && <0.11                      , data-default-class >=0.0  && <0.1-                     , template-haskell   >=2.8  && <2.10+                     , template-haskell   >=2.8  && <2.11   -- hs-source-dirs:         c-sources:           pugixml-1.4/pugixml.cpp cbit/wrapper.cc   include-dirs:        pugixml-1.4@@ -41,7 +41,7 @@  test-suite test   main-is:             test.hs-  build-depends:       base               >=4.6  && <4.8+  build-depends:       base                      , bytestring         >=0.10 && <0.11                      , pugixml                      , tasty              >=0.10 && <0.11
test/test.hs view
@@ -1,6 +1,9 @@ {-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE CPP #-} +#if MIN_VERSION_base(4,9,0) import Control.Applicative+#endif  import Test.Tasty import Test.Tasty.HUnit