This repository has been archived by the owner on Dec 21, 2023. It is now read-only.
Added run
function imitating "do-notation".
#53
Closed
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.
This PR adds a function called
run
that imitates Haskell's do-notation, as inspired by this blogpost. This implemented version here is slightly different to make it nicer-to-use. This implementation accepts returningMaybe<T>
or justT
from the generator function.This example is also implemented as a unit test but for clarification, this PR adds the possibility to do the following:
Without the
run
function, this example could be solved usingsequence
or using a combination of.bind().map()
, which doesn't scale in terms of indentation. Usingsequence
seems like an odd solution in this case as it's not particularly natural to represent these values in a map.Note though that the variables within the generator function (e.g. in above example
const x
) will be of typeany
, but any mixture of types withinMaybe<T>
is accepted (e.g. in above exampleMaybe<number>
andMaybe<string>