Intelligent derivations of Semigroup and Monoid for Wingman #1671
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 PR gives Wingman new special "known tactics" for synthesizing
Semigroup
andMonoid
instances. They do exactly what you'd expect --- passing the buck to the underlying instances for every value inside. Special to this tactic, Wingman will leave holes for any argument that it can't work out.Behind the scenes, there's quite a lot going on here. Lots of machinery needed to be moved around to get access to the instance environment, and to make sure we can find the right things in scope. Nothing too interesting, but it is a little janky --- I had to rewrite a chunk of the instance lookup machinery (see
Wingman.Context
).