The lens package

[Tags: bsd3, library]

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.


[Skip to ReadMe]

Properties

Versions0.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, 3.9.0.3, 3.9.1, 3.9.2, 3.10, 3.10.0.1, 3.10.1, 3.10.2, 3.10.3, 4.0, 4.0.1, 4.0.2, 4.0.3, 4.0.4, 4.0.5, 4.0.6, 4.0.7, 4.1, 4.1.1, 4.1.2, 4.1.2.1, 4.2, 4.3, 4.3.1, 4.3.2, 4.3.3, 4.4, 4.4.0.1, 4.4.0.2, 4.5, 4.6, 4.6.0.1, 4.7, 4.7.0.1, 4.8, 4.9, 4.9.1, 4.10, 4.11, 4.11.1, 4.12, 4.12.1, 4.12.2, 4.12.3
Change logNone available
Dependenciesarray (>=0.3.0.2 && <0.5), base (>=4.3 && <5), bytestring (>=0.9.1.10 && <0.10), containers (>=0.4.2 && <0.6), ghc-prim, gloss (==1.7.*), lens (==1.7), mtl (>=2.0.1 && <2.2), parallel (>=3.1.0.1 && <3.3), random (==1.0.*), template-haskell (>=2.4 && <2.8), text (>=0.11.1.5 && <0.12), transformers (==0.3.*) [details]
LicenseBSD3
CopyrightCopyright (C) 2012 Edward A. Kmett
AuthorEdward A. Kmett
MaintainerEdward A. Kmett <ekmett@gmail.com>
Stabilityprovisional
CategoryData, Lenses
Home pagehttp://github.com/ekmett/lens/
Bug trackerhttp://github.com/ekmett/lens/issues
Source repositoryhead: git clone git://github.com/ekmett/lens.git
Executablespong
UploadedWed Aug 8 09:00:02 UTC 2012 by EdwardKmett
DistributionsDebian:4.12.3, FreeBSD:4.12.3, LTSHaskell:4.12.3, NixOS:4.12.3, Stackage:4.12.3
Downloads121965 total (2143 in last 30 days)
Votes
16 []
StatusDocs uploaded by user
Build status unknown [no reports yet]

Modules

[Index]

Flags

NameDescriptionDefaultType
examplesDisabledManual

Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info

Downloads

Maintainers' corner

For package maintainers and hackage trustees

Readme for lens-1.7

lens

Build Status

This package provides families of lenses, isomorphisms, folds, traversals, getters and setters.

These lenses are compatible with those from lens-family, lens-family-core and lens-family-th, but they provide a great deal of additional flexibility in their composition.

Example

ghci> :m + Control.Lens Data.Text.Lens
ghci> anyOf (traverse.text) (=='y') ["hello"^.packed, "goodbye"^.packed]
True

Contact Information

Contributions and bug reports are welcome!

Please feel free to contact me through github or on the #haskell IRC channel on irc.freenode.net.

-Edward Kmett