Profunctor optics/lenses for Idris2 | GitHub Mirror: https://github.com/tokinanpa/idris2-lens
Find a file
Kiana Sheibani 63814e7809
Add elaboration scripts for creating lenses
Thanks to Stefan Hoeck for providing the code for this!
2023-10-19 16:13:23 -04:00
src Add elaboration scripts for creating lenses 2023-10-19 16:13:23 -04:00
.gitignore Initial commit 2023-03-31 13:22:03 -04:00
lens.ipkg Add elaboration scripts for creating lenses 2023-10-19 16:13:23 -04:00
LICENSE Initial commit 2023-03-31 13:22:03 -04:00
README.md Update README 2023-04-20 14:01:56 -04:00

Profunctor Optics in Idris2

This package provides utilities for working with lenses, prisms, traversals, and other optics in Idris. This library uses profunctor optics.

Eventually, this library will also include elaboration scripts to automatically generate lenses for a particular datatype.

Comparisons

This library is inspired by the Haskell libraries lens, optics and fresnel, along with the Purescript library purescript-profunctor-lenses. Different design decisions are taken from each library.

Like lens, this library comes "batteries-included" with many useful lenses for common types. It also includes the many lens operators. Like optics, fresnel and purescript-profunctor-lenses, but unlike lens, this library uses profunctor optics as opposed to van Laarhoven optics.

Like lens and fresnel, this library defines optics through type synonyms and uses the (.) operator to compose them. Like fresnel, and unlike lens, this library goes to some effort to ensure that type signatures and error messages are understandable to some degree.

This library's optics hierarchy is most similar to that of fresnel, though it also includes the Equality optic from lens. Unlike fresnel, this library also supports indexed optics.

Installation

This package depends on the profunctors package. It can be installed from pack or from its GitHub repository here.

To install using idris2 directly:

git clone https://github.com/kiana-S/idris2-lens
cd idris2-lens
idris2 --install lens.ipkg

Or you can install using pack:

pack install lens