- Renamed
Projection
toPrism
. - Implemented a complete redesign of the way
Iso
andPrism
are handled internally. AnyIso
can now be used as aPrism
. - The
isos
combinator is no longer required.iso
can now be used to construct anIso
. - Changes to the signature of
from
andunder
were necessitated by the new design. - Added
Control.Lens.Wrapped
providing a canonical isomorphism for newtypes. - Repurposed
ala
to be closer to the original design innewtype
, but addedau
andalaf
. - Added
_magnitude
,_phase
and_conjugate
toData.Complex.Lens
. Renamed other lenses for consistency:_realPart
,_imagPart
,_polar
. - Promoted
_left
and_right
to prisms and moved them toControl.Lens.Prism
. - Generalized
view
andviews
to subsume the old functionality ofperuse
andperuses
. - Generalized
review
andreviews
to both return aMonadReader
and to work on aProjection
. - Added
view'
/views'
anduse'
/uses'
forSimple
access to the environment/state. - Added
set'
, aSimple
version ofset
. - Added
reuse
:use
::review
:view
andreuses
:uses
::reviews
:views
for working aProjection
from the currentMonadState
. - Removed many isomorphisms for various newtypes.
_const
,identity
,_sum
, etc. Usewrapping Const
,wrapping Identity
, etc. - Removed
Data.Monoid.Lens
now that its newtypes are instances ofWrapped
, exporting the (<>=
)-variants fromControl.Lens.*
. - Renamed
via
tocloneIso
for consistency. - Moved
Indexed(..)
toControl.Lens.Classes
. - Renamed
index
toindexing
to reduce conflicts with third-party libraries. - Added
curried
anduncurried
toControl.Lens.Iso
. - Added
Strict(strict)
for ad hoc overloading of conversions between strict and lazy variants ofByteString
andText
. - Bug fixes for
tugTo
andjerkTo
. - These no longer traverse in the wrong direction:
scanl1Of
,scanr1Of
,mapAccumLOf
, andmapAccumROf
. - Added
anon
toControl.Lens.Iso
. - Generalized the types of the
Control.Lens.Zipper
combinators to work with other MonadPlus instances. - Added
withins
toControl.Lens.Zipper
now that they can work better with []. - Added
singular
andunsafeSingular
toControl.Lens.Traversal
to assert aTraversal
is aLens
, aFold
is aGetter
or aMonadicFold
is anAction
. - Generalized
sequenceAOf_
's type to matchsequenceA_
. - Renamed
up
/down
/left
/right
toupward
/downward
/leftward
/rightward
to reduce conflicts -- in particular withControl.Arrow
. - Readded
leftmost
andrightmost
due to the verbosity offarthest leftward
/farthest rightward
. - Added
preview
/previews
/firstOf
. DeprecatedheadOf
.
- Added support for
test-framework
0.8
- Added support for
test-framework
0.7
- Added more explicit dependencies to the doctest suite.
- Disabled the 'expected failure' quickcheck tests that occasionally would fail with internal QuickCheck errors.
- Added explicit dependency on containers and unordered-containers to the doctest suite
- Added
upon
(along with variants of it) toData.Data.Lens
, which can be used to generate aTraversal
from a field accessor or any function that returns, unmodified, a single field that would be visited bytemplate
. - Added some missing
examples/
files to the distribution. - Renamed
Data.Bits.Lens.traverseBits
tobits
. - Removed
(^!?)
, which was an alias for(^?!)
. - Removed the need for
Trustworthy
by changing the implementation ofcoerce
forBazaarT
. - Moved BazaarT to
Control.Lens.Internal
. - Added
(<&>)
toControl.Lens.Combinators
. element
andelementOf
are now indexed traversals rather than lenses and have moved toControl.Lens.IndexedTraversal
. This both fixes their former partiality and lets you use chain indexed combinators with them.- Added
elements
andelementsOf
as indexed traversals for ordinal indexing into regular traversals that generalizeelement
andelementOf
. - Renamed
Data.Complex.Lens.traverseComplex
tocomplex
. - Changed
Data.Complex.Lens.polarize
to aSimple Iso
, due to theRealFloat
constraint causing inference problems. - Renamed
traverseLeft
andtraverseRight
to_left
and_right
respectively. - Renamed
traverseSlice
,traverseFrom
, andtraverseTo
inData.Sequence.Lens
tosliced
,slicedFrom
, andslicedTo
respectively. - Renamed
traverseAt
to_at
inControl.Lens.IndexedTraversal
. - Renamed
traverseArray
to_array
inData.Array.Lens
. - Renamed and made the combinators in
Control.Lens.Zipper
more compositional to reduce third-party naming conflicts down to justleft
andright
. - Renamed
&=
and|=
to.&.=
and.|.=
for consistency, mutatis mutandis their related operations. - Added a
Plated
instances forLanguage.Haskell.TH
types. - Renamed
atIndex
andatIndices
inData.Vector.Lens
andData.Vector.Generic.Lens
toordinal
andordinals
to matchData.Sequence.Lens
- Improved SafeHaskell inference.
- Fixed a potential SafeHaskell issue where a user could use
undefined
to deriveunsafeCoerce
. You now have to import an explicitly Unsafe module and create an instance ofTrustworthy
for your type to cause this behavior, so if you do, its on your head, not mine. :) - Renamed
EvilBazaar
toBazaarT
. - Moved a lot of internals around. Most notably,
Gettable
,Settable
andEffective
have moved toControl.Lens.Classes
. - Exposed
partsOf'
andunsafePartsOf'
inControl.Lens.Traversal
to reduce reliance onBazaarT
inControl.Lens.Zipper
- Renamed
(%)
to(&)
and(^%)
to(^&)
. This avoids the conflict withData.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 fromControl.Lens.IndexedFold
. - Made
indexed
,taking
, anddropping
andelementOf
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
, andelementOf
intoControl.Lens.Traversal
. - Renamed
query
toperuse
andqueries
toperuses
. These are much less contentious names, both containuse
in their name for analogy touse
anduses
and the word is about reading. - Simpler
simple
. - Added
enum
andnon
toControl.Lens.Iso
. - Added
(^?!)
toControl.Lens.Fold
for unsafe access to the head of aFold
. - Changed
_head
,_tail
,_init
and_last
to traversals inData.List.Lens
andData.Sequence.Lens
. - Eliminated
traverseHead
,traverseTail
,traverseInit
andtraverseLast
. partsOf
andunsafePartsOf
can now also be applied to aFold
yielding aGetter
or to aMonadicFold
yielding anAction
.
- Redefined
simple
and moved it toControl.Lens.Iso
. Instead of usingsimple l
you can now composel.simple
orsimple.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 removesMagicHash
from the public API. - Removed the
bazaar#
andrunBazaar#
coercions that caused issues on GHC HEAD. - Changed the default definition of
plate
touniplate
fromignored
. - Added
Data.Vector.Lens
and instances forData.Vector
. - Added support for the
split
package, which is now part of the Haskell platform. - Removed redundant
Data.List.traverseList
. Useitraversed
ortraverse
instead. - Moved
(:<->)
toControl.Lens.Simple
. - Fixed a bug in
Control.Lens.TH
that was causingmakeIso
not to work. - Added
lifted
toControl.Lens.Setter
for mapping over monads. - Added
beside
toControl.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 anIndexedLens
and moved it toControl.Lens.IndexedLens
- Changed
ignored
to anIndexedTraversal
and moved it toControl.Lens.IndexedTraversal
- Made
elementOf
lazier and moved it fromControl.Lens.Traversal
toControl.Lens.Plated
. - Made
holesOf
andpartsOf
lazier to deal with infinite structures. - Resolved issue #75. We now generate nicer core for most
Setter
andFold
operations, and some others. - Made lenses for field access like
_1
,_2
, etc. lazier. - Added
Control.Lens.Loupe
, which provides a limited form ofLens
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 aReifiedLens
, but slightly slower. - Moved (
:=>
) and (:->
) intoControl.Lens.Simple
, which is not exported byControl.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 newfiltered
is still not a legalTraversal
, despite seeming to compose like one. - Renamed
ifiltered
toifiltering
, and while it still must take an indexed lens-like as an argument, I included a similar caveat about the result not being a legalIndexedLens
when given anIndexedLens
. The function was renamed because its signature no longer lined up with the newfiltered
and the gerundive '-ing' suffix has come to indicate an operator that transformers another lens/traversal/etc. into a new one. - Added
taking
anddropping
toControl.Lens.Traversal
.
- Alpha-renamed all combinators to a new scheme. Instead of
Foo a b c d
, they now followFoo 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
andlefts1
inControl.Lens.Zipper
which would cause them to loop forever when given a 0 offset.
- Added
?~
,<?~
,?=
and<?=
toControl.Lens.Setter
for setting the target(s) of a Lens toJust
a value. They are particularly useful when combined withat
.
- Refined the behavior of
substType
inControl.Lens.TH
to match the behavior oftypeVarsEx
when moving under binders.
- Added
generateSignatures
option toControl.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 forSimple Lens
,Simple Traversal
, andSimple Iso
respectively.
- Added
<<%~
,<<.~
,<<%=
and<<.=
for accessing the old values targeted by aLens
(or a summary of those targeted by aTraversal
) - Renamed
|>
to%
, as%~
is the lensed version of%
, and moved it toControl.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
tochoosing
. Added a simplerchosen
operation to mirrorboth
. - Added
Control.Lens.Projection
- Renamed
traverseException
toexception
andtraverseDynamic
todynamic
, upgrading them to useProjection
. makeClassy
now places each generatedLens
orTraversal
inside the class it constructs when possible. This makes it possible for users to just exportHasFoo(..)
, rather than have to enumerate each lens in the export list. It can only do that if it creates the class. If thecreateClass
flag is disabled, then it will default to the old behavior.- Added
performs
toControl.Lens.Action
to mirrorviews
inControl.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
andIndexedGetting
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
toala
, introducing further incompatibility with thenewtype
package, but reducing confusion. - Removed need for
Data.Map.Lens
andData.IntMap.Lens
by addingTraverseMin
andTraverseMax
toControl.Lens.IndexedTraversal
. - Flipped fixity of
~:
and<~:
- Added
++~
,++=
,<++~
and<++=
to Data.List.Lens in response to popular demand. - Added
|>
,<$!>
and<$!
toControl.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 aLens
when multiple fields map to the same name or some constructors are missing a field. - Removed
_
from the lens names inSystem.FilePath.Lens
. - Added
iwhere
,withIndices
,withIndicesOf
,indices
andindicesOf
to ease work with indexed traversals - Added
assign
as an alias for(.=)
inControl.Lens.Setter
. - Added
~:
,=:
,<~:
and<=:
toData.List.Lens
- Added
Control.Lens.Plated
, a port of Neil Mitchell'suniplate
that can be used on anyTraversal
. - 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
liketraverseData
- Renamed
IndexedStore
toContext
now that it is used in user-visible locations, and since I also use it asuniplate
's notion of a context. - Renamed
Kleene
toBazaar
-- "a bazaar contains a bunch of stores." - Added
Comonad
instances forContext
andBazaar
, 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
tobranches
inData.Tree.Lens
. - Added
At
andContains
toControl.Lens.IndexedLens
. - Added
FunctorWithIndex
,FoldableWithIndex
, andTraversableWithIndex
underControl.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 toControl.Lens.Internal
- Moved
Gettable
,Accessor
,Settable
andMutator
toControl.Lens.Internal
- Added
cloneTraversal
toControl.Lens.Traversal
- Renamed
clone
tocloneLens
inControl.Lens.Type
- Generalized the type of
zoom
to subsumefocus
. - Removed
Focus(..)
fromControl.Lens.Type
. - Factored out
Control.Lens.Isomorphic
. - Moved many private types to
Control.Lens.Internal
- Added
conFields
toLanguage.Haskell.TH.Lens
. - Added
System.FilePath.Lens
.
- Added missing
{-# INLINE #-}
pragmas - Renamed
meanwhile
tothroughout
inControl.Parallel.Strategies.Lens
- Added
Magnify
toControl.Lens.Getter
. - Added
Zoom
toControl.Lens.Type
.
- Added
<&=
,<&~
,<|=
, and<|~
- Moved
<>~
,<<>~
,<>=
, and<<>=
toData.Monoid.Lens
- Template Haskell now uses eager binding to avoid adding dependencies.
- Renamed
adjust
toover
- Added
au
,auf
andunder
- Added
Data.Monoid.Lens
- Increased lower dependency bound on
mtl
for cleaner installation.