BSD-3-Clause licensed and maintained by Varun Gandhi
This version can be pinned in stack with:edit-1.0.1.0@sha256:0bb937cee1c3b2eb9768d419139e7a1f7fbb4d6b6884abc8a0e3d734d81afe0a,2685

Module documentation for 1.0.1.0

Edit Hackage badge Stackage badge

The Edit monad allows you to easily bubble up whether a change was made or not when rewriting things. Some cases where this can be handy:

  1. You are making a sequence of transformations on some type and want to keep track of whether any of them changed it or not.
  2. You are rewriting a recursive type (or a garden of mutually recursive types!) and want to bubble up information whether something was changed or not.

For example, Reddit user /u/p__bing says

[..] I work as an iOS developer and we have this same exact idea implemented, as a monad, in Swift, to make our UI updates faster (if a change goes through our model layer and comes out Clean, we don’t bother touching the UI).

A small example:

>>> halveEvens x = if x `mod` 2 == 0 then (Dirty $ x `div` 2) else (Clean x)
>>> traverse halveEvens [1, 2, 3]
Dirty [1,1,3]
>>> traverse halveEvens [1, 3, 5]
Clean [1,3,5]

More thorough documentation is available on Hackage under the Data.Edit module. There is a tutorial too under Data.Edit.Tutorial.

There is also a corresponding monad transformer EditT available under Control.Monad.Trans.EditT.

Contributing

Please open an issue on the Github issue tracker to discuss missing documentation, API changes etc.

Changes

Revision history for edit

1.0.1.0 – 2018-09-03

  • QuickCheck version bump.

1.0.0.0 – 2018-07-19

  • QuickCheck and comonad are enabled by default instead of being disabled by default. The flag names have been changed to reflect this.