taggy-lens-0.1.2: taggy-lens.cabal
name: taggy-lens
version: 0.1.2
synopsis: Lenses for the taggy html/xml parser
description:
Lenses, folds, traversals and prisms for
<http://hackage.haskell.org/package/taggy taggy>.
.
This greatly simplifies your life when dealing with
the ugly world of Real Life HTML. Here's an
<https://github.com/alpmestan/taggy-lens/blob/master/example/HackageNew.hs example>.
It lists the date, author and package name of
all the /recent package uploads/ entries from the hackage page of the same name.
Note that it uses <http://hackage.haskell.org/package/wreq wreq> to /fetch/ the
Hackage page.
.
> module Main (main) where
>
> import Control.Lens (to, only,(^?),ix, toListOf)
> import Data.ByteString.Lazy (ByteString)
> import Data.Text (Text)
> import Data.Text.Encoding.Error (lenientDecode)
> import Data.Text.Lazy.Encoding (decodeUtf8With)
> import Network.HTTP.Client (Response)
> import Network.Wreq (responseBody, get)
> import Text.Taggy (Node)
> import Text.Taggy.Lens (html, elements, children, contents,allNamed)
>
> data Upload =
> Upload Text -- ^ date
> Text -- ^ author
> Text -- ^ package name
> deriving (Show)
>
> table :: [Node] -> Maybe Upload
> table row = do
> date <- row ^? ix 0 . contents
> author <- row ^? ix 1 . contents
> package <- row ^? ix 2 . elements . contents
> return $ Upload date author package
>
> recentPackages :: Response ByteString -> [Maybe Upload]
> recentPackages = toListOf
> $ responseBody . to (decodeUtf8With lenientDecode)
> . html . allNamed (only "tr") . children . to table
>
> main :: IO ()
> main = get "https://hackage.haskell.org/packages/recent" >>= print `fmap` recentPackages
.
Report any problem on our <http://github.com/alpmestan/taggy-lens/issues issues> page on github.
homepage: http://github.com/alpmestan/taggy-lens
license: BSD3
license-file: LICENSE
author: Alp Mestanogullari, Vikram Verma
maintainer: alpmestan@gmail.com
copyright: 2014 Alp Mestanogullari, Vikram Verma
category: Text, Web
build-type: Simple
cabal-version: >= 1.10
library
exposed-modules:
Text.Taggy.Lens
build-depends:
base >= 4.5 && < 5,
lens >= 4,
taggy >= 0.1,
text,
unordered-containers
hs-source-dirs:
src
default-language:
Haskell2010
ghc-options:
-O2 -Wall -fno-warn-orphans
test-suite spec
type:
exitcode-stdio-1.0
hs-source-dirs:
src,
test
main-is:
Spec.hs
build-depends:
base >= 4.5 && < 5,
taggy,
text,
lens >= 4,
unordered-containers,
hspec
default-language:
Haskell2010
ghc-options:
-O2 -Wall -fno-warn-orphans
test-suite doctests
type:
exitcode-stdio-1.0
hs-source-dirs:
test
main-is:
DocTest.hs
ghc-options:
-threaded
build-depends:
base >= 4.5 && < 5,
doctest
default-language:
Haskell2010