It also provides (unsafe) building blocks to build such APIs, see
Data.Propagator.Purify.
Related work
Edward Kmett’s Data.Propagator.Prop module achieves something similar, and allows to construct more the graphs more flexibly, but requires a stricter phase control akin to runST.
Jeannin, Kozen and Silva’s work on “CoCaml: Functional Programming with
Regular Coinductive
Types” in Ocaml even goes
a step further and not only allow the recursive definitions to be written down
as here, but even allows functions consume regular recursive values, and
still produces something that can be solved.
Changes
Revision history for rec-def
0.2 – 2022-09-22
The naive propagator does not use (==) to detect changes, but a custom
operator, to allow faster and less restricted operators.
Module structure refactoring
No more R type constructor, instead individual RBool etc. types