implement shortcut for more data types in Natural/fold #2596
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 is a continuation of #2585
This PR implements a shortcut for Natural/fold for more data types. When the accumulator stops changing,
Natural/fold
should return immediately.First test: (This involves an accumulator of type
Natural
, which is already supported after the previous PR.)Second test shows a plausible use case: an integer division algorithm. Division proceeds by repeated subtraction, but we cannot know the required number of subtractions precisely. We know that to divide
x / y
we need no more thanx
subtractions.The accumulator has a more complicated type than just
Natural
. The implementation now requires us to be able to compareVal a
values of more complicated type.Please let me know how I can improve this Haskell code. I am new to Haskell.
What I did:
valEq
to compare twoVal a
values in case we can easily compare them (natural literals, record literals,Some()
, etc.)Natural/fold
: return immediately when the accumulator stops changingWhat I would like to do in addition to that:
Val