Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Wingman: Ensure homomorphic destruct covers all constructors in the domain #1968

Merged
merged 6 commits into from
Jun 25, 2021

Conversation

isovector
Copy link
Collaborator

This PR changes the behavior of the homo tactic, ensuring that it is total and well-typed to apply. Before, it would just automatically fill in the data constructors, regardless of whether they were the right type. The new logic is to check which data constructors are possible in the domain, and which in the codomain, and to subtract the latter from the former. If this set is non-empty, it means either the thing won't type check, or that due to some GADT equalities, it's impossible to map some constructors. Either way, the tactic should fail, and does now.

Fixes #565

@pepeiborra pepeiborra added the merge me Label to trigger pull request merge label Jun 23, 2021
@mergify mergify bot merged commit b4deb4a into haskell:master Jun 25, 2021
jneira pushed a commit to jneira/haskell-language-server that referenced this pull request Jun 25, 2021
…omain (haskell#1968)

* Ensure homomorphism covers the entire codomain

* Add tests

* Add the same logic to lambda case homomorphism

Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
@isovector isovector deleted the homo-must-typecheck branch July 19, 2021 17:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
merge me Label to trigger pull request merge
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Tactics plugin generates ill-typed term
2 participants