Skip to content
Fetching contributors…
Cannot retrieve contributors at this time
226 lines (198 sloc) 13.4 KB


  • Added upon (along with variants of it) to Data.Data.Lens, which can be used to generate a Traversal from a field accessor or any function that returns, unmodified, a single field that would be visited by template.
  • Added some missing examples/ files to the distribution.
  • Renamed Data.Bits.Lens.traverseBits to bits.
  • Removed (^!?), which was an alias for (^?!).
  • Removed the need for Trustworthy by changing the implementation of coerce for BazaarT.
  • Moved BazaarT to Control.Lens.Internal.
  • Added (<&>) to Control.Lens.Combinators.
  • element and elementOf are now indexed traversals rather than lenses and have moved to Control.Lens.IndexedTraversal. This both fixes their former partiality and lets you use chain indexed combinators with them.
  • Added elements and elementsOf as indexed traversals for ordinal indexing into regular traversals that generalize element and elementOf.
  • Renamed Data.Complex.Lens.traverseComplex to complex.
  • Changed Data.Complex.Lens.polarize to a Simple Iso, due to the RealFloat constraint causing inference problems.
  • Renamed traverseLeft and traverseRight to _left and _right respectively.
  • Renamed traverseSlice, traverseFrom, and traverseTo in Data.Sequence.Lens to sliced, slicedFrom, and slicedTo respectively.
  • Renamed traverseAt to _at in Control.Lens.IndexedTraversal.
  • Renamed traverseArray to _array in Data.Array.Lens.
  • Renamed and made the combinators in Control.Lens.Zipper more compositional to reduce third-party naming conflicts down to just left and right.
  • Renamed &= and |= to .&.= and .|.= for consistency, mutatis mutandis their related operations.
  • Added a Plated instances for Language.Haskell.TH types.
  • Renamed atIndex and atIndices in Data.Vector.Lens and Data.Vector.Generic.Lens to ordinal and ordinals to match Data.Sequence.Lens


  • Improved SafeHaskell inference.


  • Fixed a potential SafeHaskell issue where a user could use undefined to derive unsafeCoerce. You now have to import an explicitly Unsafe module and create an instance of Trustworthy for your type to cause this behavior, so if you do, its on your head, not mine. :)
  • Renamed EvilBazaar to BazaarT.
  • Moved a lot of internals around. Most notably, Gettable, Settable and Effective have moved to Control.Lens.Classes.
  • Exposed partsOf' and unsafePartsOf' in Control.Lens.Traversal to reduce reliance on BazaarT in Control.Lens.Zipper


  • Renamed (%) to (&) and (^%) to (^&). This avoids the conflict with Data.Ratio, which was our highest priority conflict with a third party library.
  • Switched to a more liberal type for ignored
  • Removed some "isplitting" bad combinators from Control.Lens.IndexedFold.
  • Made indexed, taking, and dropping and elementOf lazier and capable of dealing with infinite traversals and infinite folds.
  • Improved Indexing to support infinite traversals and folds.
  • Removed some of the more redundant combinators from Control.Lens.Plated, which already had existing aliases in the rest of the traversal API.
  • Moved partsOf, holesOf, and elementOf into Control.Lens.Traversal.
  • Renamed query to peruse and queries to peruses. These are much less contentious names, both contain use in their name for analogy to use and uses and the word is about reading.
  • Simpler simple.
  • Added enum and non to Control.Lens.Iso.
  • Added (^?!) to Control.Lens.Fold for unsafe access to the head of a Fold.
  • Changed _head, _tail, _init and _last to traversals in Data.List.Lens and Data.Sequence.Lens.
  • Eliminated traverseHead, traverseTail, traverseInit and traverseLast.
  • partsOf and unsafePartsOf can now also be applied to a Fold yielding a Getter or to a MonadicFold yielding an Action.


  • Redefined simple and moved it to Control.Lens.Iso. Instead of using simple l you can now compose l.simple or simple.l providing more nuanced control and a more compositional API.
  • Moved the various foo# combinators used to emit cleaner core into an unexported module, Control.Lens.Unsafe. This removes MagicHash from the public API.
  • Removed the bazaar# and runBazaar# coercions that caused issues on GHC HEAD.
  • Changed the default definition of plate to uniplate from ignored.
  • Added Data.Vector.Lens and instances for Data.Vector.
  • Added support for the split package, which is now part of the Haskell platform.
  • Removed redundant Data.List.traverseList. Use itraversed or traverse instead.
  • Moved (:<->) to Control.Lens.Simple.
  • Fixed a bug in Control.Lens.TH that was causing makeIso not to work.
  • Added lifted to Control.Lens.Setter for mapping over monads.
  • Added beside to Control.Lens.Traversal.
  • Removed the operators from Data.List.Lens, they broke the overall pattern of the rest of the API, and were terrible clutter.
  • Fixed a bug that caused resultAt to give wrong answers most of the time.
  • Changed resultAt to an IndexedLens and moved it to Control.Lens.IndexedLens
  • Changed ignored to an IndexedTraversal and moved it to Control.Lens.IndexedTraversal


  • Made elementOf lazier and moved it from Control.Lens.Traversal to Control.Lens.Plated.
  • Made holesOf and partsOf lazier to deal with infinite structures.
  • Resolved issue #75. We now generate nicer core for most Setter and Fold operations, and some others.
  • Made lenses for field access like _1, _2, etc. lazier.
  • Added Control.Lens.Loupe, which provides a limited form of Lens that can be read from and written to and which can compose with other lenses, but can also be returned in a list or as a monadic result, but cannot be used directly for most combinators without cloning it first. It is easier to compose than a ReifiedLens, but slightly slower.
  • Moved (:=>) and (:->) into Control.Lens.Simple, which is not exported by Control.Lens by default to reduce name conflicts with third party libraries.


  • Simplified the type of filtered, so that it can be composed with other folds rather than be parameterized on one. Included the caveat that the new filtered is still not a legal Traversal, despite seeming to compose like one.
  • Renamed ifiltered to ifiltering, and while it still must take an indexed lens-like as an argument, I included a similar caveat about the result not being a legal IndexedLens when given an IndexedLens. The function was renamed because its signature no longer lined up with the new filtered and the gerundive '-ing' suffix has come to indicate an operator that transformers another lens/traversal/etc. into a new one.
  • Added taking and dropping to Control.Lens.Traversal.


  • Alpha-renamed all combinators to a new scheme. Instead of Foo a b c d, they now follow Foo s t a b. This means that you don't need to alpha rename everything in your head to work through the examples, simplifies exposition, and uses s and t for common state monad parameters. Thanks go to Shachaf Ben-Kiki for the grunt work of slogging through hundreds of definitions by hand and with regular expressions!
  • Restored lenses to Trustworthy status so they can be used with Safe Haskell once more.


  • Fixed a bug in rights1 and lefts1 in Control.Lens.Zipper which would cause them to loop forever when given a 0 offset.


  • Added ?~, <?~, ?= and <?= to Control.Lens.Setter for setting the target(s) of a Lens to Just a value. They are particularly useful when combined with at.


  • Refined the behavior of substType in Control.Lens.TH to match the behavior of typeVarsEx when moving under binders.


  • Added generateSignatures option to Control.Lens.TH to allow the end user to disable the generation of type signatures for the template-haskell generated lenses. This lets the user supply hand-written haddocks and more restricted signatures.


  • Added Control.Lens.Type.simple.


  • Added Control.Lens.Zipper.
  • Added <<~, a version of <~ that supports chaining assignment.
  • Added :->, :=>, and :<-> as type operator aliases for Simple Lens, Simple Traversal, and Simple Iso respectively.


  • Added <<%~, <<.~, <<%= and <<.= for accessing the old values targeted by a Lens (or a summary of those targeted by a Traversal)
  • Renamed |> to %, as %~ is the lensed version of %, and moved it to Control.Lens.Getter along with a version ^% with tighter precedence that can be interleaved with ^.
  • Upgraded to doctest 0.9, which lets us factor out common $setup for our doctests
  • Renamed merged to choosing. Added a simpler chosen operation to mirror both.
  • Added Control.Lens.Projection
  • Renamed traverseException to exception and traverseDynamic to dynamic, upgrading them to use Projection.
  • makeClassy now places each generated Lens or Traversal inside the class it constructs when possible. This makes it possible for users to just export HasFoo(..), rather than have to enumerate each lens in the export list. It can only do that if it creates the class. If the createClass flag is disabled, then it will default to the old behavior.
  • Added performs to Control.Lens.Action to mirror views in Control.Lens.Getter.


  • Restored compatibility with GHC 7.2. This required a major version bump due to making some MPTC-based default signatures conditional.

  • Added the missing Control.Lens.Combinators to exported-modules! Its absence was causing it not to be included on hackage.


  • Generalized the signature of Getting, Acting and IndexedGetting to help out with the common user code scenario of needing to read and then write to change types.
  • Documentation cleanup and additional examples.
  • Renamed au to ala, introducing further incompatibility with the newtype package, but reducing confusion.
  • Removed need for Data.Map.Lens and Data.IntMap.Lens by adding TraverseMin and TraverseMax to Control.Lens.IndexedTraversal.
  • Flipped fixity of ~: and <~:
  • Added ++~, ++=, <++~ and <++= to Data.List.Lens in response to popular demand.
  • Added |>, <$!> and <$! to Control.Lens.Combinators, which exports combinators that are often useful in lens-based code, but that don't strictly involve lenses.
  • Added an HUnit-based test suite by @orenbenkiki


  • Fixed bugs in Traversal code-generation.


  • Added build option -f-inlining to facilitate building with the various TH 2.8 versions used by GHC 7.6 and HEAD.
  • Added build option -f-template-haskell for testing without template haskell. (Users should be able to assume TH is enabled; use this only for testing!)
  • Added support for generating a Traversal rather than a Lens when multiple fields map to the same name or some constructors are missing a field.
  • Removed _ from the lens names in System.FilePath.Lens.
  • Added iwhere, withIndices, withIndicesOf, indices and indicesOf to ease work with indexed traversals
  • Added assign as an alias for (.=) in Control.Lens.Setter.
  • Added ~:, =:, <~: and <=: to Data.List.Lens


  • Added Control.Lens.Plated, a port of Neil Mitchell's uniplate that can be used on any Traversal.
  • Added Data.Data.Lens with smart traversals that know how to avoid traversing parts of a structure that can't contain a given type.
  • Added Data.Typeable.Lens with _cast and _gcast like traverseData
  • Renamed IndexedStore to Context now that it is used in user-visible locations, and since I also use it as uniplate's notion of a context.
  • Renamed Kleene to Bazaar -- "a bazaar contains a bunch of stores."
  • Added Comonad instances for Context and Bazaar, so we can use stores directly as the notion of an editable context in uniplate
  • Compatibility with both sets of template haskell quirks for GHC 7.6.1-rc1 and the GHC 7.6.1 development head.
  • Renamed children to branches in Data.Tree.Lens.
  • Added At and Contains to Control.Lens.IndexedLens.
  • Added FunctorWithIndex, FoldableWithIndex, and TraversableWithIndex under Control.Lens.WithIndex
  • Added support for unordered-containers.

  • GHC 7.6.1 development HEAD compatibility (but broke 7.6.1-rc1)

  • Haddock cleanup


  • Added the indexed Kleene store to Control.Lens.Internal
  • Moved Gettable, Accessor, Settable and Mutator to Control.Lens.Internal
  • Added cloneTraversal to Control.Lens.Traversal
  • Renamed clone to cloneLens in Control.Lens.Type
  • Generalized the type of zoom to subsume focus.
  • Removed Focus(..) from Control.Lens.Type.
  • Factored out Control.Lens.Isomorphic.
  • Moved many private types to Control.Lens.Internal
  • Added conFields to Language.Haskell.TH.Lens.
  • Added System.FilePath.Lens.


  • Added missing {-# INLINE #-} pragmas
  • Renamed meanwhile to throughout in Control.Parallel.Strategies.Lens
  • Added Magnify to Control.Lens.Getter.
  • Added Zoom to Control.Lens.Type.


  • Added <&=, <&~, <|=, and <|~
  • Moved <>~, <<>~, <>=, and <<>= to Data.Monoid.Lens
  • Template Haskell now uses eager binding to avoid adding dependencies.


  • Renamed adjust to over
  • Added au, auf and under
  • Added Data.Monoid.Lens
  • Increased lower dependency bound on mtl for cleaner installation.
Jump to Line
Something went wrong with that request. Please try again.