Skip to content

typesanitizer/edit

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.

About

Edit is a monad for rewriting things.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published