The yall package

Why yet another lens library?
First, none of the existing libraries for Lenses were
adequate for my needs (specifically for my use of lenses
in pez). And anyway, why not try to create something
novel and better?

Distinguishing features:

Lenses are parameterized over two Monads (by convention
m and w), and look like a -> m (b -> w a, b). this
lets us define lenses for sum types, that perform
validation, that do IO (e.g. persist data to disk),
etc., etc.

a module Data.Yall.Iso that complements Lens powerfully

a rich set of category-level class instances (for now
from categories) for Lens and Iso. These along
with the pre-defined primitive lenses and combinators
give an interface comparable to Arrow

You should import either Data.Yall or Data.Yall.Lens,
and optionally Data.Yall.Iso. Data.Yall is a simplified,
but mostly-compatible, version of a subset of Data.Yall.Lens.