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 |
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:
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