git.iko.soy/typeable/xml-lens
on master help sign in
Merge pull request #10 from poscat0x04/add-withoutAttribute
b8fced0Fumiaki Kinoshita
Text/XML/Lens.hs+10−1
@@ -25,6 +25,8 @@ module Text.XML.Lens (
25 -- ** Attributes
25 -- ** Attributes
26 , attributeIs
26 , attributeIs
27 , attributeSatisfies
27 , attributeSatisfies
28+ , attributeSatisfies'
29+ , withoutAttribute
28 , attr
30 , attr
29 , attribute
31 , attribute
30 , attrs
32 , attrs
@@ -62,6 +64,7 @@ import Data.Text (Text)
62import Data.Map (Map)
64import Data.Map (Map)
63import Control.Applicative
65import Control.Applicative
64import qualified Data.CaseInsensitive as CI
66import qualified Data.CaseInsensitive as CI
67+import Data.Maybe (isNothing)
65
68
66infixr 9 ./
69infixr 9 ./
67
70
@@ -171,7 +174,13 @@ el n f s
171 | otherwise = pure s
174 | otherwise = pure s
172
175
173attributeSatisfies :: Name -> (Text -> Bool) -> Traversal' Element Element
176attributeSatisfies :: Name -> (Text -> Bool) -> Traversal' Element Element
174−attributeSatisfies n p = filtered (maybe False p . preview (attrs . ix n))
177+attributeSatisfies n p = attributeSatisfies' n (maybe False p)
178+
179+attributeSatisfies' :: Name -> (Maybe Text -> Bool) -> Traversal' Element Element
180+attributeSatisfies' n p = filtered (p . preview (attrs . ix n))
181+
182+withoutAttribute :: Name -> Traversal' Element Element
183+withoutAttribute n = attributeSatisfies' n isNothing
175
184
176attributeIs :: Name -> Text -> Traversal' Element Element
185attributeIs :: Name -> Text -> Traversal' Element Element
177attributeIs n v = attributeSatisfies n (==v)
186attributeIs n v = attributeSatisfies n (==v)