generic-lens

Generically derive traversals, lenses and prisms.

https://github.com/kcsongor/generic-lens

Version on this page:2.2.2.0
LTS Haskell 23.0:2.2.2.0@rev:1
Stackage Nightly 2024-12-13:2.2.2.0@rev:1
Latest on Hackage:2.2.2.0@rev:1

See all snapshots generic-lens appears in

BSD-3-Clause licensed by Csongor Kiss
Maintained by [email protected]
This version can be pinned in stack with:generic-lens-2.2.2.0@sha256:7e2e9fb6af836c31f7b7fe9ad4d54974acb44f8f2f8b507ca8866c4ccc060f16,3962

This library uses GHC.Generics to derive efficient optics (traversals, lenses and prisms) for algebraic data types in a type-directed way, with a focus on good type inference and error messages when possible.

The library exposes a van Laarhoven interface. For an alternative interface, supporting an opaque optic type, see generic-optics.

Changes

generic-lens-2.2.2.0 (2023-04-15)

  • Support unprefixed constructor prisms on GHC 9.6 (#152)

generic-lens-2.2.1.0 (2022-01-22)

  • GHC 9.2 compatibility

generic-lens-2.2.0.0 (2021-07-13)

  • GHC 9.0 compatibility

generic-lens-2.1.0.0 (2021-01-25)

  • Bump to generic-lens-core-2.1.0.0

generic-lens-2.0.0.0 (2020-02-11)

  • Drop support for GHC < 8.4
  • Better inference for field'
  • Param traversal now properly recurses deeply (#88)
  • Reorganise internals (see generic-lens-core)

Breaking API changes:

  • HasTypesUsing now takes 4 params
  • Removed HasConstraints traversal

generic-lens-1.2.0.1

  • Give HasAny/AsAny the same VTA behavior on 8.6 and 8.8 (Ryan Scott)

generic-lens-1.2.0.0

  • Add HasTypesUsing and HasTypesCustom for custom traversals (Lysxia)
  • Improve type errors when no Generic instance is defined
  • types now supports Text by default

Breaking API changes

  • HasType now includes a reflexive case so that every type ‘contains’ itself (Matt Parsons)
  • AsSubtype and Subtype now include a reflexive case so that every type is a subtype of itself

generic-lens-1.1.0.0

  • Fix regression in type inference for polymorphic optics
  • Add HasField0, HasPosition0, AsConstructor0, HasField_, HasPositon_, and AsConstructor_ (Lysxia)
  • types now supports Data.Word and Data.Int (Lysxia)
  • Add Wrapped iso for newtypes (Isaac Elliott)
  • Expose internals through Data.GenericLens.Internal
  • Add labels for prisms (Daniel Winograd-Cort)

generic-lens-1.0.0.2

  • Fix compile-time performance regression

generic-lens-1.0.0.1

  • Remove dump-core dependency
  • Relax upper bound on criterion (#42)

generic-lens-1.0.0.0

  • Traversals (types, param, constraints)
  • Prisms are now optimal too
  • Monomorphic versions of lenses and prisms also included

Breaking API changes

  • projectSub now returns Maybe sub instead of Either sup sub (#21)

generic-lens-0.5.1.0

  • Infer input type from result type (#25)
  • Allow changing of multiple type parameters (#24)
  • Allow changing of type parameters that have kinds other than * (#23)
  • Fix error message in subtype lens

generic-lens-0.5.0.0

  • Lenses and prisms are now type-changing.
  • More informative error messages
  • More readable type signatures in type errors and when using :t
  • Use doctest
  • Include examples in Haddock

Breaking API changes

  • The type parameters of the classes have been changed to accommodate the type-changing update:

    class HasField name a s -> class HasField name s t a b etc.

    Accordingly, field :: Lens' s a -> field :: Lens s t a b