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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think that
(a,b) => Eval.now(a && b.value)
would need to be something like(a,b) => if (a) b else Eval.now(false)
in order to be stack safe if there were say 10ktrue
values prepending the continuallyfalse
values. So it might be a good idea to avoid calling.value
until the very end, since that's what you usually want to do withEval
to achieve stack safety.Having said that, I just gave it a try and it looks like the Cats
foldRight
implementation forStream
isn't actually stack safe. I'll create a separate issue for that.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I really mean this as a toy example to demonstrate the laziness. I think that it is clearer to read as is. but if you say please I'll change it :)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hmm yeah, I see your point. It just seems bad to me to write an implementation that isn't stack-safe when a few lines above calls out that the std lib
foldRight
would hit a stack overflow. And if this is where people come to learn aboutfoldRight
, I'd want them to see examples of how to do it "right". I don't want to be a stick in the mud here though, so maybe I should just let it go :)