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:
- You are making a sequence of transformations on some type and want to keep track of whether any of them changed it or not.
- 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
Data.Edit module. There is a tutorial too under
There is also a corresponding monad transformer
EditT available under
Please open an issue on the Github issue tracker to discuss missing documentation, API changes etc.
Revision history for
18.104.22.168 – 2018-07-19
comonadare enabled by default instead of being disabled by default. The flag names have been changed to reflect this.