[ fix ] Make traverse
and friends lazy for LazyList
#3076
Merged
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.
Description
This change is like #2412, but for old long-existing functions. Since
Applicative
interface is inherently not lazy, the current implementation was not lazy by the effect, even if the underlying monad's effect could be short-cutting. One can see an example in the added test.Since,
LazyList
is stillFoldable
, old behaviour is reachable by converting theLazyList
toList
.It may seem that this change relies on some exploiting of the breakage of monadic laws, but it is fundamental for an eager language since monad interface is inherently lazy anyway.
Should this change go in the CHANGELOG?
implementation, I have updated
CHANGELOG.md
(and potentially alsoCONTRIBUTORS.md
).