packages feed

lens-2.5: lens.cabal

name:          lens
category:      Data, Lenses
version:       2.5
license:       BSD3
cabal-version: >= 1.8
license-file:  LICENSE
author:        Edward A. Kmett
maintainer:    Edward A. Kmett <ekmett@gmail.com>
stability:     provisional
homepage:      http://github.com/ekmett/lens/
bug-reports:   http://github.com/ekmett/lens/issues
copyright:     Copyright (C) 2012 Edward A. Kmett
synopsis:      Lenses, Folds and Traversals
description:
  This package comes \"Batteries Included\" with many useful lenses for the types
  commonly used from the Haskell Platform, and with tools for automatically
  generating lenses and isomorphisms for user-supplied data types.
  .
  The combinators in @Control.Lens@ provide a highly generic toolbox for composing
  families of getters, folds, isomorphisms, traversals, setters and lenses and their
  indexed variants.
  .
  More information on the care and feeding of lenses, including a tutorial and motivation
  for their types can be found on the lens wiki.
  .
  <https://github.com/ekmett/lens/wiki>
  .
  A small game that manages its state using lenses can be found in the example folder.
  .
  <https://github.com/ekmett/lens/blob/master/examples/Pong.hs>
  .
  /Lenses, Folds and Traversals/
  .
  The core of this hierarchy looks like:
  .
  <<https://github.com/ekmett/lens/wiki/images/Hierarchy-2.5.png>>
  .
  You can compose any two elements of the hierarchy above using (.) from the Prelude, and you can
  use any element of the hierarchy as any type it links to above it.
  .
  The result is their lowest upper bound in the hierarchy (or an error if that bound doesn't exist).
  .
  For instance:
  .
  * You can use any 'Traversal' as a 'Fold' or as a 'Setter'.
  .
  * The composition of a 'Traversal' and a 'Getter' yields a 'Fold'.
  .
  /Minimizing Dependencies/
  .
  If you want to provide lenses and traversals for your own types in your own libraries, then you
  can do so without incurring a dependency on this (or any other) lens package at all.
  .
  e.g. for a data type:
  .
  > data Foo a = Foo Int Int a
  .
  You can define lenses such as
  .
  > -- bar :: Simple Lens (Foo a) Int
  > bar :: Functor f => (Int -> f Int) -> Foo a -> f Foo a
  > bar f (Foo a b c) = fmap (\a' -> Foo a' b c) (f a)
  .
  > -- baz :: Lens (Foo a) (Foo b) a b
  > quux :: Functor f => (a -> f b) -> Foo a -> f (Foo b)
  > quux f (Foo a b c) = fmap (Foo a b) (f c)
  .
  without the need to use any type that isn't already defined in the @Prelude@.
  .
  And you can define a traversal of multiple fields with 'Control.Applicative.Applicative':
  .
  > -- traverseBarAndBaz :: Simple Traversal (Foo a) Int
  > traverseBarAndBaz :: Applicative f => (Int -> f Int) -> Foo a -> f (Foo a)
  > traverseBarAndBaz f (Foo a b c) = Foo <$> f a <*> f b <*> pure c
  .
  What is provided in this library is a number of stock lenses and traversals for
  common haskell types, a wide array of combinators for working them, and more
  exotic functionality, (e.g. getters, setters, indexed folds, isomorphisms).

build-type:    Simple
tested-with:   GHC == 7.4.1
extra-source-files:
  .travis.yml
  .ghci
  .gitignore
  .vim.custom
  config
  examples/LICENSE
  examples/lens-examples.cabal
  examples/Pong.hs
  examples/Plates.hs
  README.markdown
  CHANGELOG.markdown

source-repository head
  type: git
  location: git://github.com/ekmett/lens.git

library
  build-depends:
    base                 >= 4.3      && < 5,
    bytestring           >= 0.9.1.10 && < 0.11,
    comonad              == 3.0.*,
    comonad-transformers == 3.0.*,
    comonads-fd          == 3.0.*,
    containers           >= 0.4.2    && < 0.6,
    hashable             == 1.1.*,
    mtl                  >= 2.1.1    && < 2.2,
    template-haskell     >= 2.4      && < 2.9,
    text                 >= 0.11     && < 0.12,
    transformers         >= 0.3      && < 0.4,
    unordered-containers >= 0.2      && < 0.3

  exposed-modules:
    Control.Exception.Lens
    Control.Lens
    Control.Lens.Action
    Control.Lens.Fold
    Control.Lens.Getter
    Control.Lens.Indexed
    Control.Lens.IndexedGetter
    Control.Lens.IndexedFold
    Control.Lens.IndexedLens
    Control.Lens.IndexedSetter
    Control.Lens.IndexedTraversal
    Control.Lens.Internal
    Control.Lens.Iso
    Control.Lens.Isomorphic
    Control.Lens.Plated
    Control.Lens.Representable
    Control.Lens.Setter
    Control.Lens.TH
    Control.Lens.Traversal
    Control.Lens.Tuple
    Control.Lens.Type
    Control.Lens.WithIndex
    Control.Lens.Zoom
    Data.Bits.Lens
    Data.ByteString.Lens
    Data.ByteString.Strict.Lens
    Data.ByteString.Lazy.Lens
    Data.Complex.Lens
    Data.Data.Lens
    Data.Dynamic.Lens
    Data.HashSet.Lens
    Data.IntMap.Lens
    Data.IntSet.Lens
    Data.List.Lens
    Data.Map.Lens
    Data.Monoid.Lens
    Data.Sequence.Lens
    Data.Set.Lens
    Data.Text.Lens
    Data.Text.Strict.Lens
    Data.Text.Lazy.Lens
    Data.Tree.Lens
    Data.Typeable.Lens
    Language.Haskell.TH.Lens

  -- platform
  build-depends:   array >= 0.3.0.2 && < 0.5
  exposed-modules: Data.Array.Lens

  build-depends:   filepath >= 1.2.0.0 && < 1.4
  exposed-modules: System.FilePath.Lens

  build-depends:   parallel >= 3.1.0.1 && < 3.3
  exposed-modules: Control.Parallel.Strategies.Lens Control.Seq.Lens

  if impl(ghc>7.6.0.20120810)
    cpp-options: -DNEW_INLINE_PRAGMAS

  if (impl(ghc>=7.4))
    other-extensions: Trustworthy
    build-depends: ghc-prim
    exposed-modules: GHC.Generics.Lens

  ghc-options: -Wall -fwarn-tabs -O2 -fdicts-cheap -funbox-strict-fields
  hs-source-dirs: src

-- Verify the results of the examples
test-suite doctests
  type:    exitcode-stdio-1.0
  main-is: doctests.hs
  build-depends:
    base == 4.*,
    directory >= 1.0 && < 1.2,
    doctest >= 0.8 && <= 0.9,
    filepath >= 1.3 && < 1.4
  ghc-options: -Wall -Werror -threaded
  hs-source-dirs: tests

-- Verify that Template Haskell expansion works
test-suite templates
  type: exitcode-stdio-1.0
  main-is: templates.hs
  build-depends:
    base,
    lens
  ghc-options: -Wall -Werror -threaded
  hs-source-dirs: tests

-- Verify the properties of lenses with QuickCheck
test-suite properties
  type: exitcode-stdio-1.0
  main-is: properties.hs
  build-depends:
    base,
    lens,
    QuickCheck   >= 2.4 && < 2.6,
    transformers >= 0.3 && < 0.5
  ghc-options: -w -threaded
  hs-source-dirs: tests

-- Basic benchmarks for the uniplate-style combinators
benchmark plated
  type: exitcode-stdio-1.0
  main-is: plated.hs
  build-depends:
    base,
    comonad,
    criterion,
    deepseq,
    ghc-prim,
    lens,
    transformers,
    uniplate >= 1.6.7 && < 1.7
  ghc-options: -Wall -O2 -threaded
  hs-source-dirs: benchmarks