The lens package
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.
Lens Families
For a longer description of why you should care about lens families, and an overview of why we use 4 parameters a, b, c, and d instead of just 2, see http://comonad.com/reader/2012/mirrored-lenses/.
Sometimes you won't need the flexibility those extra parameters afford you and you can use
type Simple f a b = f a a b b
to describe a Simple Setter, Simple Traversal, Simple Lens or Simple Iso.
Avoiding Dependencies
Note: If you merely want your library to provide lenses you may not have to actually import any lens library at all. For, say, a Simple Lens Bar Foo, just export a function with the signature:
foo :: Functor f => (Foo -> f Foo) -> Bar -> f Bar
and then you can compose it with other lenses using nothing more than (.) from the Prelude.
Deriving Lenses
You can derive lenses automatically for many data types using makeLenses, and if a container is fully characterized by its lenses, you can use Representable to automatically derive Functor, Applicative, Monad, and Distributive.
Properties
| Versions | 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.0.1, 1.0.2, 1.0.3, 1.1, 1.1.1, 1.2, 1.3, 1.3.1, 1.4, 1.4.1, 1.5, 1.6, 1.7, 1.7.1, 1.8, 1.9, 1.9.1, 2.0, 2.1, 2.2, 2.3, 2.4, 2.4.0.2, 2.5, 2.6, 2.6.1, 2.7, 2.7.0.1, 2.8, 2.9, 3.0, 3.0.1, 3.0.2, 3.0.3, 3.0.4, 3.0.5, 3.0.6, 3.1, 3.2, 3.3, 3.4, 3.5, 3.5.1, 3.6, 3.6.0.1, 3.6.0.2, 3.6.0.3, 3.6.0.4, 3.7, 3.7.0.1, 3.7.0.2, 3.7.1, 3.7.1.1, 3.7.1.2, 3.7.2, 3.7.3, 3.7.4, 3.7.5, 3.7.6, 3.8, 3.8.0.1, 3.8.0.2, 3.8.1, 3.8.2, 3.8.3, 3.8.4, 3.8.5, 3.8.6, 3.8.7, 3.8.7.1, 3.8.7.2, 3.8.7.3, 3.9, 3.9.0.1, 3.9.0.2 |
|---|---|
| Dependencies | array (≥0.3.0.2 & <0.5), base (≥4.3 & <5), bytestring (≥0.9.1.10 & <0.10), containers (≥0.4.2 & <0.6), mtl (≥2.0.1 & <2.2), parallel (≥3.1.0.1 & <3.3), template-haskell (≥2.4 & <2.8), text (≥0.11.1.5 & <0.12), transformers (0.3.*) |
| License | BSD3 |
| Copyright | Copyright (C) 2012 Edward A. Kmett |
| Author | Edward A. Kmett |
| Maintainer | Edward A. Kmett <ekmett@gmail.com> |
| Stability | provisional |
| Category | Data, Lenses |
| Home page | http://github.com/ekmett/lens/ |
| Bug tracker | http://github.com/ekmett/lens/issues |
| Source repository | git clone git://github.com/ekmett/lens.git |
| Upload date | Wed Aug 8 10:00:35 UTC 2012 |
| Uploaded by | EdwardKmett |
| Built on | ghc-7.4 |
| Distributions | NixOS: 3.9.0.2, Debian: 3.9.0.2, FreeBSD: 3.8.7.3 |
Modules
- Control
- Exception
- Control.Lens
- Control.Lens.Action
- Control.Lens.Fold
- Control.Lens.Getter
- Control.Lens.Indexed
- Control.Lens.IndexedFold
- Control.Lens.IndexedGetter
- Control.Lens.IndexedLens
- Control.Lens.IndexedSetter
- Control.Lens.IndexedTraversal
- Control.Lens.Internal
- Control.Lens.Iso
- Control.Lens.Representable
- Control.Lens.Setter
- Control.Lens.TH
- Control.Lens.Traversal
- Control.Lens.Type
- Parallel
- Strategies
- Seq
- Data
- Array
- Bits
- ByteString
- Complex
- Dynamic
- Either
- IntMap
- IntSet
- List
- Map
- Pair
- Sequence
- Set
- Text
- Tree
- GHC
- Generics
- Language
- Haskell
Downloads
- lens-1.7.1.tar.gz (Cabal source package)
- package description (included in the package)