Optics as an abstract interface

Version on this page:0.3
LTS Haskell 22.12:
Stackage Nightly 2024-03-01:
Latest on Hackage:

See all snapshots optics appears in

BSD-3-Clause licensed by Adam Gundry, Andres Löh, Andrzej Rybczak, Oleg Grenrus
Maintained by [email protected]
This version can be pinned in stack with:optics-0.3@sha256:5f62fca47b01ce065bb999724b8cdd45e747537892ee00faeac4b4b20d821aee,6494

Module documentation for 0.3

This package makes it possible to define and use Lenses, Traversals, Prisms and other optics, using an abstract interface. See the main module Optics for the documentation.

This is the "batteries-included" variant with many dependencies; see the optics-core package and other optics-* dependencies if you need a more limited dependency footprint.

Note: Hackage does not yet display documentation for reexported-modules, but you can start from the Optics module documentation or see the module list in optics-core.


optics-0.3 (2020-04-15)

  • GHC-8.10 support
  • Add filteredBy and unsafeFilteredBy
  • Add FunctorWithIndex, FoldableWithIndex and TraversableWithIndex instances for Const and Constant
  • Add afoldVL and iafoldVL constructors
  • Rename toAtraversalVL to atraverseOf, and toIxAtraversalVL to iatraverseOf
  • Generalise element and elementOf to construct IxAffineTraversals instead of IxTraversals
  • Change mapping to work on optic kinds other than Iso: it now supports Lens and Prism degenerating to Getter and Review respectively
  • Generalise ignored to be an IxAffineTraversal instead of an IxTraversal
  • Add singular and isingular
  • Add (^?!) operator
  • Expose Curry and CurryCompose
  • Show expected elimination forms on optic kind mismatch
  • Use stricter uncurry for better performance
  • Add hidden LabelOptic instance to postpone instance resolution
  • Add GeneralLabelOptic for pluggable generic optics as labels
  • Document monoidal structures of Folds
  • Remove proxy argument from implies
  • Add itoList
  • Improvements to TH-generated optics:
    • LabelOptic instances make optic kind a type equality for better type inference
    • LabelOptic instances for field optics work properly in the presence of type families
    • Fixed calculation of phantom types in LabelOptic prism instances
    • Better support for generating optics in the presence of kind polymorphism

optics-0.2 (2019-10-18)

  • Add non, non' and anon to Optics.Iso
  • ix can produce optic kinds other than AffineTraversal
  • Generalise type of generic1
  • Move use from Optics.View to Optics.State and restrict its type
  • Add preuse to Optics.State
  • Rename use, uses, listening and listenings to reflect the fact that they have ViewResult-generalised types
  • Add noPrefixFieldLabels and noPrefixNamer to Optics.TH
  • Move some internal definitions out to new indexed-profunctors package
  • Introduce OpticKind and IxList type synonyms for better type inference
  • Make itraverse for Seq faster for containers >= 0.6.0
  • Assorted documentation improvements

optics-0.1 (2019-09-02)

  • Initial release