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.
Request
In many Innmind packages the pattern of reducing a
Sequence
with a carried value ofMaybe
orEither
is used to iteratively operate IO operations that may fail and return this potential failure. (An example is the creation of a temporary file ininnmind/operating-system
).The current implementation brings 2 problems:
Maybe
/Either
Sequence
even though it's not usedSolution
This PR adds a
Sequence::sink()->until()
that is the same asSequence::reduce()
except it uses the continuation pattern to know when to stop reducing.On top of that,
->sink()->maybe()
and->sink()->either()
are added as shortcuts to imply the continuation from the values contained in theMaybe
/Either
.This should help simplify other packages and their performance.