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/foldshould 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 / ywe need no more thanxsubtractions.The accumulator has a more complicated type than just
Natural. The implementation now requires us to be able to compareVal avalues of more complicated type.Please let me know how I can improve this Haskell code. I am new to Haskell.
What I did:
valEqto compare twoVal avalues 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