Use lenses to permit "focusing" on a State effect #39
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
A draft PR to show the concept....
One of the great things about algebraic effects is that they allow you to focus the range of effects needed by a function to its most limited set: the "weakest precondition of effects", if you will.
This PR shows a simple way to make this idea more flexible. For example, I often have an "application state" carried by an effect
State s
, but many of my functions need only a part of this state, or they may need those parts only in read-only or append-only terms. It could be that I have a huge state, and my function needs read-only access to one part and read-write access to another part, but none of the rest.The current
freer-simple
library already makes this fairly easy to do, but users have to write the reinterpretations themselves. This PR offers a few combinators for lensing into state in these different ways.I doubt you'd want to include
lens
as a dependency, but if you think it's useful maybe it could become its own library. I also want to see how this idea plays out in other libraries likefused-effects
.