lens-simple/lens-simple.cabal
2016-07-12 14:03:06 -04:00

92 lines
5.5 KiB
Plaintext

name: lens-simple
version: 0.1.0.9
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, the
original van Laarhoven-O'Connor lens library.
@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); but more importantly for its
extreme conceptual simplicity and theoretical soundness. Much of
the material it contains is well-explained, from a tutorial point of view, by
<http://hackage.haskell.org/package/lens-tutorial lens-tutorial> It is independent,
self-standing and readily intelligible apart from any darker
more general system of combinators that might attempt to extend it. Much
of it ought to be in the Prelude.
.
Convenient import of the elementary combinators from @lens-family@,
however, a little complicated. The idea of this trivial module, 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!
.
The material in this familar <http://hackage.haskell.org/package/lens-tutorial elementary lens tutorial>
will work fine if you swap imports in the
<http://hackage.haskell.org/package/lens-tutorial-1.0.0/docs/src/Control-Lens-Tutorial.html source>
and follow along in ghci as prompted.
.
As another illustration of the simplicity of the
fundamental van Laarhoven-O'Connor 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
among the best introductory lens tutorials 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. On the other hand,
you might just need some of the additional material
present in the similarly demystifying
<http://hackage.haskell.org/package/microlens microlens>
or <http://hackage.haskell.org/package/microlens-th microlens-th> and
the associated modules.
.
This module was originally intended to simplify the use of packages that
follow the original promise of the van Laarhoven-O'Connor 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>.
.
@Lens.Simple@ also re-exports convenient TH incantations like
@makeLenses@ from Dan Burton's associated
<http://hackage.haskell.org/package/lens-family-th lens-family-th>.
.
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 && < 6
, mtl >=2.1 && <2.3
, lens-family == 1.2.*
, lens-family-core == 1.2.*
, lens-family-th < 0.6
default-language: Haskell2010