@hackage lens-simple0.1.0.7

simplified import of elementary lens-family combinators

This module, Lens.Simple, just re-exports the main modules from Russell O'Connor's lens-family package. lens-family is particularly remarkable for its minute number of dependencies: apart from mtl they are all ghc 'boot' libraries. Lens.Simple also re-exports makeLenses and other convenient TH incantations from Dan Burton's associated lens-family-th.

The idea, then, is just to make a sort of low-powered, minimal-dependency, lens-family equivalent of the 800 lb gorilla of lens library imports:

import Control.Lens

namely, the light-weight and elegant:

import Lens.Simple

Check it out, it's even one character shorter!

As an illustration of the simplicity of the fundamental van Laarhoven lens combinators - and their homogeneity with Control.Lens - note that the gloss pong example from the lens library examples directory - which continues to be the best introductory lens tutorial precisely by saying nothing - requires only this abbreviating change of imports. If you make that program more complicated, you might of course end up needing the more sophisticated material in Control.Lens and its immense mass of dependencies. Within its more limited sphere, though, lens-family accords as far as possible with lens, so this switch will often be all that is necessary to begin using them.

This module was originally intended to simplify the use of packages that follow the original promise of the van Laarhoven lenses. Correct practice is to export lenses without depending on a lens-library, where possible. In basic cases these just use familiar Prelude types, after all. Examples of best practices in this respect are e.g. lens-family-th which doesn't depend on lens-family despite its name and pipes-related packages like pipes-bytestring and pipes-group. Because of the heavily monadic character of the latter libraries, the extra material in Control.Lens is rarely of use anyway; one sticks largely to view, set, over and, for state operations, zoom.

Note that lenses and other combinators are here frequently a bit more specialized than their Control.Lens equivalents: for example, _1 and _2 are here familiarly specialized to act just on real Haskell pairs.