lens-simple-0.1.0.7: lens-simple.cabal
name: lens-simple
version: 0.1.0.7
synopsis: simplified import of elementary lens-family combinators
description: This module, <http://hackage.haskell.org/package/lens-simple/docs/Lens-Simple.html Lens.Simple>,
just re-exports the main modules from Russell O\'Connor's
<http://hackage.haskell.org/package/lens-family lens-family> package.
@lens-family@ is particularly remarkable for its minute number of dependencies:
apart from <http://hackage.haskell.org/package/mtl mtl>
they are all ghc \'boot\' libraries.
@Lens.Simple@ also re-exports @makeLenses@ and
other convenient TH incantations from Dan Burton's associated
<http://hackage.haskell.org/package/lens-family-th 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
<https://github.com/michaelt/lens-family-simple/blob/master/examples/Pong.hs 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. <http://hackage.haskell.org/package/lens-family-th lens-family-th> which
doesn't depend on @lens-family@ despite its name and pipes-related packages like
<http://hackage.haskell.org/package/pipes-bytestring pipes-bytestring>
and <http://hackage.haskell.org/package/pipes-group 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.
homepage: https://github.com/michaelt/lens-simple
license: BSD3
license-file: LICENSE
author: michaelt
maintainer: what_is_it_to_do_anything@yahoo.com
copyright: 2012, 2013, 2014 Russell O'Connor; 2015 Michael Thompson
category: Lenses
build-type: Simple
extra-source-files: README.md, changelog
cabal-version: >=1.10
source-repository head
type: git
location: https://github.com/michaelt/lens-simple
library
exposed-modules: Lens.Simple
build-depends: base == 4.*
, transformers >= 0.2.0 && < 5
, mtl >=2.1 && <2.3
, lens-family == 1.2.*
, lens-family-core == 1.2.*
, lens-family-th == 0.4.*
default-language: Haskell2010