Skip to content

Full type checker implementation#95

Open
purefunctor wants to merge 389 commits intomainfrom
relentless-type-checking
Open

Full type checker implementation#95
purefunctor wants to merge 389 commits intomainfrom
relentless-type-checking

Conversation

@purefunctor
Copy link
Owner

The goal of this branch is to be able to compile the core packages; the compiler-compatbility crate provides a utility that shows compilation errors for each module in the package. There's still a very long journey ahead.

purefunctor and others added 30 commits February 12, 2026 03:00
This moves generalisation and globalisation for value signatures only
after value equations are checked. This addresses an issue where kind
variables that get solved in the equation body are generalised too early
in the previous implementation.
This demonstrates a current limitation in the type checker where
operators poiinting to kind-polymorphic value groups infer to an
incorrect type. This issue can be addressed by deferring generalisation
for operator declarations, much like it is now for value declarations.
Record patterns that mention different subsets of a row type produced
rows of unequal width in the specialisation matrix, causing a panic in
default_matrix. Normalise all record constructors to the union of labels
before specialising, padding missing labels with wildcard patterns.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The test case demonstrates unification errors that come from failed
promote_type checks when trying to solve unification variables against
rigid type variables that came from the instance head canonical.
This fixes the 228 test case by introducing a proper instantiation step
for rigid type variables from the instance head canonical. This creates
fresh rigid type variables with update depths, fixing issues with the
escape check in promote_type and subsequently, unification.

This also changes the representation of Bindings::implicit to be based
on Vec instead of HashMap. This enables trivial shadowing, ensuring that
implicit type variables are kept up to date after instantiation.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant