lens-5.3.3: Lenses, Folds and Traversals

Copyright | (C) 2012-16 Edward Kmett
License | BSD-style (see the file LICENSE)
Maintainer | Edward Kmett <ekmett@gmail.com>
Stability | experimental
Portability | non-portable
Safe Haskell | Safe-Inferred
Language | Haskell2010

Control.Lens

Description

You can derive lenses automatically for many data types:

    import Control.Lens

    data FooBar a
      = Foo { _x :: [Int], _y :: a }
      | Bar { _x :: [Int] }
    makeLenses ''FooBar

This defines the following lenses:

    x :: Lens' (FooBar a) [Int]
    y :: Traversal (FooBar a) (FooBar b) a b

You can then access the value of `_x` with (`^.`), the value of `_y` – with (`^?`) or (`^?!`) (since it can fail), set the values with (`.~`), modify them with (`%~`), and use almost any other combinator that is re-exported here on those fields.

The combinators here have unusually specific type signatures, so for particularly tricky ones, the simpler type signatures you might want to pretend the combinators have are specified as well.

More information on how to use lenses is available on the lens wiki:

http://github.com/ekmett/lens/wiki

# Documentation

module Control.Lens.At

module Control.Lens.Cons

module Control.Lens.Each

module Control.Lens.Empty

module Control.Lens.Equality

module Control.Lens.Fold

module Control.Lens.Getter

module Control.Lens.Indexed

module Control.Lens.Iso

module Control.Lens.Lens

module Control.Lens.Level

module Control.Lens.Plated

module Control.Lens.Prism

module Control.Lens.Reified

module Control.Lens.Review

module Control.Lens.Setter

module Control.Lens.TH

module Control.Lens.Traversal

module Control.Lens.Tuple

module Control.Lens.Type

module Control.Lens.Wrapped

module Control.Lens.Zoom