Support fixpoint-fixing under recursion variables

Sometimes, we might need to fixpoint-fix a unification like

[ Bar [ Bar <a>, Foo ], Foo ] as <a>  🛠️  [ Bar <b>, Foo ] as <b>

where we hit a comparison between <a> and <b>. In this case, follow each
recursion point independently and see if we can find the chain to the needle
we were searching for.

Closes #5476
This commit is contained in:
Ayaz Hafiz 2023-06-13 17:14:14 -05:00
parent b3c598fcf6
commit 49a92e5ef1
No known key found for this signature in database
GPG key ID: 0E2A37416A25EF58
3 changed files with 65 additions and 1 deletions

View file

@ -92,6 +92,9 @@ flags! {
/// Prints all type mismatches hit during type unification.
ROC_PRINT_MISMATCHES
/// Prints all type variables entered for fixpoint-fixing.
ROC_PRINT_FIXPOINT_FIXING
/// Verifies that after let-generalization of a def, any rigid variables in the type annotation
/// of the def are indeed generalized.
///