Simplify binary lambdas with intermediate decls #877
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.
We used to make a simplifying assumption that the binary lambda
arguments to effect handlers have no decls in between the first and
second lambda binder. However, it's been easy to violate that
assumption, because inference likes to insert decls while unpacking
patterns. This meant that accumulating over a monoid such as
AddMonoid Complex
caused a simplification error, because ofComplex
argument unpacking.
This change relaxes the constraint slightly, to allow for the
problematic decls. However, it's still not a complete solution as it
assumes that the second binder and the eventual reconstruction don't
depend on those decls. This seems sufficient for now and we can always
revise that in the future.
This unblocks #876.