packages feed

xml-lens 0.1 → 0.1.1

raw patch · 2 files changed

+165/−165 lines, 2 files

Files

Text/XML/Lens.hs view
@@ -1,143 +1,143 @@-{-# LANGUAGE Rank2Types #-}
------------------------------------------------------------------------------
--- |
--- Module      :  Text.XML.Lens
--- Copyright   :  (C) 2013 Fumiaki Kinoshita
--- License     :  BSD-style (see the file LICENSE)
---
--- Maintainer  :  Fumiaki Kinoshita <fumiexcel@gmail.com>
--- Stability   :  experimental
--- Portability :  non-portable
---
-----------------------------------------------------------------------------
-module Text.XML.Lens (
-    -- * Useful traversals inspired by XPath
-    (./)
-    , el
-    , attributeIs
-    , attributeSatisfies
-    , text
-    , comment
-    -- * Lenses, traversals for 'Element'
-    , name
-    , attrs
-    , nodes
-    , attr
-    , attribute
-    -- * Prisms for 'Node'
-    , _Element
-    , _Content
-    , AsInstruction(..)
-    , AsComment(..)
-    -- * Lenses for 'Document'
-    , root
-    , prologue
-    , epilogue
-    , doctype
-    -- * Lenses for 'Name'
-    , _nameLocalName
-    , _nameNamespace
-    , _namePrefix
-    ) where
-import Text.XML
-import Control.Lens
-import Data.Text (Text)
-import Data.Map (Map)
-import Control.Applicative
-
-infixr 9 ./
-
-prologue :: Lens' Document Prologue
-prologue f doc = fmap (\p -> doc { documentPrologue = p} ) $ f $ documentPrologue doc
-
-root :: Lens' Document Element
-root f doc = fmap (\p -> doc { documentRoot = p} ) $ f $ documentRoot doc
-
-epilogue :: Lens' Document [Miscellaneous]
-epilogue f doc = fmap (\p -> doc { documentEpilogue = p} ) $ f $ documentEpilogue doc
-
-doctype :: Lens' Prologue (Maybe Doctype)
-doctype f doc = fmap (\p -> doc { prologueDoctype = p} ) $ f $ prologueDoctype doc
-
-class AsInstruction t where
-    _Instruction :: Prism' t Instruction
-
-instance AsInstruction Node where
-    _Instruction = prism' NodeInstruction $ \s -> case s of
-        NodeInstruction e -> Just e
-        _ -> Nothing
-
-instance AsInstruction Miscellaneous where
-    _Instruction = prism' MiscInstruction $ \s -> case s of
-        MiscInstruction e -> Just e
-        _ -> Nothing
-
-class AsComment t where
-    _Comment :: Prism' t Text
-
-instance AsComment Node where
-    _Comment = prism' NodeComment $ \s -> case s of
-        NodeComment e -> Just e
-        _ -> Nothing
-
-instance AsComment Miscellaneous where
-    _Comment = prism' MiscComment $ \s -> case s of
-        MiscComment e -> Just e
-        _ -> Nothing
-
-_nameLocalName :: Lens' Name Text
-_nameLocalName f n = fmap (\x -> n { nameLocalName = x }) $ f $ nameLocalName n
-
-_nameNamespace :: Lens' Name (Maybe Text)
-_nameNamespace f n = fmap (\x -> n { nameNamespace = x }) $ f $ nameNamespace n
-
-_namePrefix :: Lens' Name (Maybe Text)
-_namePrefix f n = fmap (\x -> n { namePrefix = x }) $ f $ namePrefix n
-
-_Element :: Prism' Node Element
-_Element = prism' NodeElement $ \s -> case s of
-    NodeElement e -> Just e
-    _ -> Nothing
-
-_Content :: Prism' Node Text
-_Content = prism' NodeContent $ \s -> case s of
-    NodeContent e -> Just e
-    _ -> Nothing
-
-name :: Lens' Element Name
-name f e = fmap (\x -> e { elementName = x }) $ f $ elementName e
-
-attrs :: Lens' Element (Map Name Text)
-attrs f e = fmap (\x -> e { elementAttributes = x }) $ f $ elementAttributes e
-
-nodes :: Lens' Element [Node]
-nodes f e = fmap (\x -> e { elementNodes = x }) $ f $ elementNodes e
-
-attr :: Name -> Traversal' Element Text
-attr n = attrs . ix n
-
-attribute :: Name -> Lens' Element (Maybe Text)
-attribute n = attrs . at n
-
-el :: Name -> Traversal' Element Element
-el n f s
-    | elementName s == n = f s
-    | otherwise = pure s
-
-attributeSatisfies :: Name -> (Text -> Bool) -> Traversal' Element Element
-attributeSatisfies n p = plate . filtered (maybe False p . preview (attrs . ix n))
-
-attributeIs :: Name -> Text -> Traversal' Element Element
-attributeIs n v = attributeSatisfies n (==v)
-
-text :: Traversal' Element Text
-text = nodes . traverse . _Content
-
-comment :: Traversal' Element Text
-comment = nodes . traverse . _Comment
-
-instance Plated Element where
-    plate = nodes . traverse . _Element
-
-(./) :: Plated a => Traversal s t a a -> Traversal a a u v -> Traversal s t u v
+{-# LANGUAGE Rank2Types #-}+-----------------------------------------------------------------------------+-- |+-- Module      :  Text.XML.Lens+-- Copyright   :  (C) 2013 Fumiaki Kinoshita+-- License     :  BSD-style (see the file LICENSE)+--+-- Maintainer  :  Fumiaki Kinoshita <fumiexcel@gmail.com>+-- Stability   :  experimental+-- Portability :  non-portable+--+----------------------------------------------------------------------------+module Text.XML.Lens (+    -- * Useful traversals inspired by XPath+    (./)+    , el+    , attributeIs+    , attributeSatisfies+    , text+    , comment+    -- * Lenses, traversals for 'Element'+    , name+    , attrs+    , nodes+    , attr+    , attribute+    -- * Prisms for 'Node'+    , _Element+    , _Content+    , AsInstruction(..)+    , AsComment(..)+    -- * Lenses for 'Document'+    , root+    , prologue+    , epilogue+    , doctype+    -- * Lenses for 'Name'+    , _nameLocalName+    , _nameNamespace+    , _namePrefix+    ) where+import Text.XML+import Control.Lens+import Data.Text (Text)+import Data.Map (Map)+import Control.Applicative++infixr 9 ./++prologue :: Lens' Document Prologue+prologue f doc = fmap (\p -> doc { documentPrologue = p} ) $ f $ documentPrologue doc++root :: Lens' Document Element+root f doc = fmap (\p -> doc { documentRoot = p} ) $ f $ documentRoot doc++epilogue :: Lens' Document [Miscellaneous]+epilogue f doc = fmap (\p -> doc { documentEpilogue = p} ) $ f $ documentEpilogue doc++doctype :: Lens' Prologue (Maybe Doctype)+doctype f doc = fmap (\p -> doc { prologueDoctype = p} ) $ f $ prologueDoctype doc++class AsInstruction t where+    _Instruction :: Prism' t Instruction++instance AsInstruction Node where+    _Instruction = prism' NodeInstruction $ \s -> case s of+        NodeInstruction e -> Just e+        _ -> Nothing++instance AsInstruction Miscellaneous where+    _Instruction = prism' MiscInstruction $ \s -> case s of+        MiscInstruction e -> Just e+        _ -> Nothing++class AsComment t where+    _Comment :: Prism' t Text++instance AsComment Node where+    _Comment = prism' NodeComment $ \s -> case s of+        NodeComment e -> Just e+        _ -> Nothing++instance AsComment Miscellaneous where+    _Comment = prism' MiscComment $ \s -> case s of+        MiscComment e -> Just e+        _ -> Nothing++_nameLocalName :: Lens' Name Text+_nameLocalName f n = fmap (\x -> n { nameLocalName = x }) $ f $ nameLocalName n++_nameNamespace :: Lens' Name (Maybe Text)+_nameNamespace f n = fmap (\x -> n { nameNamespace = x }) $ f $ nameNamespace n++_namePrefix :: Lens' Name (Maybe Text)+_namePrefix f n = fmap (\x -> n { namePrefix = x }) $ f $ namePrefix n++_Element :: Prism' Node Element+_Element = prism' NodeElement $ \s -> case s of+    NodeElement e -> Just e+    _ -> Nothing++_Content :: Prism' Node Text+_Content = prism' NodeContent $ \s -> case s of+    NodeContent e -> Just e+    _ -> Nothing++name :: Lens' Element Name+name f e = fmap (\x -> e { elementName = x }) $ f $ elementName e++attrs :: Lens' Element (Map Name Text)+attrs f e = fmap (\x -> e { elementAttributes = x }) $ f $ elementAttributes e++nodes :: Lens' Element [Node]+nodes f e = fmap (\x -> e { elementNodes = x }) $ f $ elementNodes e++attr :: Name -> Traversal' Element Text+attr n = attrs . ix n++attribute :: Name -> Lens' Element (Maybe Text)+attribute n = attrs . at n++el :: Name -> Traversal' Element Element+el n f s+    | elementName s == n = f s+    | otherwise = pure s++attributeSatisfies :: Name -> (Text -> Bool) -> Traversal' Element Element+attributeSatisfies n p = filtered (maybe False p . preview (attrs . ix n))++attributeIs :: Name -> Text -> Traversal' Element Element+attributeIs n v = attributeSatisfies n (==v)++text :: Traversal' Element Text+text = nodes . traverse . _Content++comment :: Traversal' Element Text+comment = nodes . traverse . _Comment++instance Plated Element where+    plate = nodes . traverse . _Element++(./) :: Plated a => Traversal s t a a -> Traversal a a u v -> Traversal s t u v l ./ m = l . plate . m
xml-lens.cabal view
@@ -1,24 +1,24 @@-name:                xml-lens
-version:             0.1
-synopsis:            Lenses, traversals, prisms for xml-conduit
-description:         
-homepage:            https://github.com/fumieval/xml-lens
-license:             BSD3
-license-file:        LICENSE
-author:              Fumiaki Kinoshita
-maintainer:          Fumiaki Kinoshita <fumiexcel@gmail.com>
-copyright:           Copyright (C) 2013 Fumiaki Kinoshita
-category:            Control
-build-type:          Simple
-cabal-version:       >=1.10
-
-source-repository head
-  type: git
-  location: https://github.com/fumieval/xml-lens.git
-
-library
-  default-language:   Haskell2010
-  ghc-options: -Wall
-  exposed-modules:     Text.XML.Lens
-  -- other-modules:       
+name:                xml-lens+version:             0.1.1+synopsis:            Lenses, traversals, prisms for xml-conduit+description:         +homepage:            https://github.com/fumieval/xml-lens+license:             BSD3+license-file:        LICENSE+author:              Fumiaki Kinoshita+maintainer:          Fumiaki Kinoshita <fumiexcel@gmail.com>+copyright:           Copyright (C) 2013 Fumiaki Kinoshita+category:            Control+build-type:          Simple+cabal-version:       >=1.10++source-repository head+  type: git+  location: https://github.com/fumieval/xml-lens.git++library+  default-language:   Haskell2010+  ghc-options: -Wall+  exposed-modules:     Text.XML.Lens+  -- other-modules:          build-depends:       base ==4.*, lens >= 3.8 && < 4.2, containers >= 0.4.0 && < 0.6, text == 0.11.*, xml-conduit >= 1.1