fclabels: First class accessor labels implemented as lenses.

[ bsd3, data, lenses, library ] [ Propose Tags ]

This package provides first class labels that can act as bidirectional record fields. The labels can be derived automatically using Template Haskell which means you don't have to write any boilerplate yourself. The labels are implemented as lenses and are fully composable. Lenses can be used to get, set and modify parts of a data type in a consistent way.

See Data.Label for an introductory explanation or see the introductory blog post at http://fvisser.nl/post/2013/okt/1/fclabels-2.0.html

  • Total and partial lenses

Internally lenses do not used Haskell functions directly, but are implemented as categories. Categories allow the lenses to be run in custom computational contexts. This approach allows us to make partial lenses that point to fields of multi-constructor datatypes in an elegant way.

See Data.Label.Partial for the use of partial labels.

  • Monomorphic and polymorphic lenses

We have both polymorphic and monomorphic lenses. Polymorphic lenses allow updates that change the type. The types of polymorphic lenses are slightly more verbose than their monomorphic counterparts, but their usage is similar. Because monomorphic lenses are built by restricting the types of polymorphic lenses they are essentially the same and can be freely composed with eachother.

See Data.Label.Mono and Data.Label.Poly for the difference between polymorphic and monomorphic lenses.

  • Using fclabels

To simplify working with labels we supply both a set of labels for Haskell's base types, like lists, tuples, Maybe and Either, and we supply a set of combinators for working with labels for values in the Reader and State monad.

See Data.Label.Base and Data.Label.Monadic for more information.

  • Changelog from 2.0.4 to 2.0.5

  - Support for GHC 8.10. Thanks to Potato Hatsue.

[Skip to Readme]

Downloads

Note: This package has metadata revisions in the cabal description newer than included in the tarball. To unpack the package including the revisions, use 'cabal get'.

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

Versions [RSS] 0.1, 0.1.2, 0.2.0, 0.3.0, 0.4.0, 0.4.1, 0.4.2, 0.4.2.1, 0.9.0, 0.9.1, 0.11.0, 0.11.1, 0.11.1.1, 0.11.2, 1.0, 1.0.1, 1.0.2, 1.0.3, 1.0.4, 1.0.5, 1.1.0, 1.1.0.1, 1.1.0.2, 1.1.1.0, 1.1.1.1, 1.1.2, 1.1.3, 1.1.4, 1.1.4.1, 1.1.4.2, 1.1.4.3, 1.1.5, 1.1.6, 1.1.7, 1.1.7.1, 2.0, 2.0.0.1, 2.0.0.2, 2.0.0.3, 2.0.0.4, 2.0.0.5, 2.0.1, 2.0.1.1, 2.0.2, 2.0.2.1, 2.0.2.2, 2.0.2.3, 2.0.2.4, 2.0.3, 2.0.3.1, 2.0.3.2, 2.0.3.3, 2.0.4, 2.0.5, 2.0.5.1
Change log CHANGELOG
Dependencies base (>=4.5 && <4.19), base-orphans (>=0.8.2 && <0.10), mtl (>=1.0 && <2.4), template-haskell (>=2.2 && <2.21), transformers (>=0.2 && <0.7) [details]
License BSD-3-Clause
Author Sebastiaan Visser, Erik Hesselink, Chris Eidhof, Sjoerd Visscher with lots of help and feedback from others.
Maintainer Sebastiaan Visser <code@fvisser.nl>
Revised Revision 2 made by Bodigrim at 2023-09-03T20:44:13Z
Category Data, Lenses
Home page https://github.com/sebastiaanvisser/fclabels
Bug tracker https://github.com/sebastiaanvisser/fclabels/issues
Source repo head: git clone git://github.com/sebastiaanvisser/fclabels.git
Uploaded by AdamBergmark at 2021-05-27T18:41:39Z
Distributions Arch:2.0.5.1, Debian:2.0.5, Fedora:2.0.5.1, LTSHaskell:2.0.5.1, NixOS:2.0.5.1
Reverse Dependencies 50 direct, 147 indirect [details]
Downloads 73997 total (94 in the last 30 days)
Rating 2.25 (votes: 2) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2021-05-27 [all 1 reports]

Readme for fclabels-2.0.5.1

[back to package description]

fclabels: first class accessor labels

This package provides first class labels that can act as bidirectional record fields. The labels can be derived automatically using Template Haskell which means you don't have to write any boilerplate yourself. The labels are implemented as lenses and are fully composable. Lenses can be used to get, set and modify parts of a data type in a consistent way.

See Data.Label for an introductory explanation.

Total and partial lenses

Internally lenses do not use Haskell functions directly, but are implemented as categories. Categories allow the lenses to be run in custom computational contexts. This approach allows us to make partial lenses that point to fields of multi-constructor datatypes in an elegant way.

See Data.Label.Partial for the use of partial labels.

Monomorphic and polymorphic lenses

We have both polymorphic and monomorphic lenses. Polymorphic lenses allow updates that change the type. The types of polymorphic lenses are slightly more verbose than their monomorphic counterparts, but their usage is similar. Because monomorphic lenses are built by restricting the types of polymorphic lenses they are essentially the same and can be freely composed with eachother.

See Data.Label.Mono and Data.Label.Poly for the difference between polymorphic and monomorphic lenses.

Using fclabels

To simplify working with labels we supply both a set of labels for Haskell's base types, like lists, tuples, Maybe and Either, and we supply a set of combinators for working with labels for values in the Reader and State monad.

See Data.Label.Base and Data.Label.Monadic for more information.

On Hackage: http://hackage.haskell.org/package/fclabels

Introduction: http://fvisser.nl/post/2013/okt/1/fclabels-2.0.html