Ayaz Hafiz
4657a957f7
When storing variables, merge them directly with the target rather than unifying
...
When we unify two variables that end up merged, the rank of the
resulting content is the lower of the two variables being merged. But
during storage, we really do mean, take the target descriptor of the
type we're merging against, and don't try to lower to a
possibly-generalized rank! This fixes a couple bugs I didn't even
realize were present!
2022-07-29 14:53:14 -04:00
Ayaz Hafiz
ff4b5f58ab
Avoid over-eager disjoint variable merging during lambda set compaction
...
During the unspecialized lambda set compaction procedure, we might end
up trying to merge too many disjoint variables during unspecialized
lambda unification. Avoid doing so, by checking if we're in the
compaction procedure.
2022-07-29 14:18:47 -04:00
Ayaz Hafiz
7a4c57d3dc
Clippy
2022-07-29 08:43:19 -04:00
Ayaz Hafiz
4049eb6780
Remove unused OpportunisticResolve field
2022-07-29 08:43:19 -04:00
Ayaz Hafiz
31220d5598
Fix spelling
2022-07-29 08:43:19 -04:00
Ayaz Hafiz
f145f29b1b
Make sure records don't de-generalize function types, fixing ability let-generalization
...
Closes #3641
2022-07-29 08:43:19 -04:00
Ayaz Hafiz
f2d4bf20ba
Collect awaited lambda set specializations to be solved when a specialization is known
...
Despite our best efforts, sometimes we still can't specialize lambda
sets on the fly, if a specialization lambda set's specialization type
isn't yet well-known! This commit adds an `AwaitingSpecializations`
data structure to keep track of the lambda sets blocked for
specialization behind a specialization's full resolution in the module.
After the specialization is resolved, its blocked lambda sets can be
eagerly compacted.
2022-07-29 08:43:18 -04:00
Ayaz Hafiz
350d9cd59b
Simplify opportunistic resolution
...
We don't need to unify the type state anymore because resolved able
variables are determined only by one type variable.
2022-07-29 08:43:18 -04:00
Ayaz Hafiz
5a42acc11c
Debug specialization keys
2022-07-29 08:43:18 -04:00
Ayaz Hafiz
240a48bc1c
De-duplicate unspecialized lambda sets by root var
2022-07-29 08:43:17 -04:00
Ayaz Hafiz
76fe397aa1
Consolidate exposed types and derived module in a derived environment
2022-07-29 08:43:17 -04:00
Ayaz Hafiz
0ec92c12f7
Move lambda set specialization to its own module in solve
2022-07-29 08:43:16 -04:00
Ayaz Hafiz
c0e976f544
Wrap unification subs in Env
2022-07-28 08:57:33 -04:00
Ayaz Hafiz
0989b2cb82
Move solve problems to their own crate
2022-07-28 08:57:32 -04:00
Ayaz Hafiz
ae4916ceb7
Remove unused variables
2022-07-28 08:57:14 -04:00
Ayaz Hafiz
753d12e912
Eagerly resolve obligations during solving
...
Replaces the previously-used `DeferredObligations` structure used for
accumulating and then acting over ability obligations during module
solving in favor of just the `ObligationCache`. The `ObligationCache`
stays alive for the entirety of a module solving and provides a
convenient mechanism for answering obligation queries with a backed
cache.
2022-07-28 08:57:13 -04:00
Ayaz Hafiz
bb14b649a2
Don't re-report obligations that we know were seen elsewhere
2022-07-26 20:46:35 -04:00
Ayaz Hafiz
6b9c1cb690
Check whether opaque implements ability using store
2022-07-26 20:46:35 -04:00
Ayaz Hafiz
8659ddc684
Remove dominated derive errors
2022-07-26 20:46:35 -04:00
Ayaz Hafiz
3fbf4e228b
Remove dominated derives from obligation checking
2022-07-26 20:46:34 -04:00
Ayaz Hafiz
ad3eb959e9
Don't mark dominated derives anymore
2022-07-26 20:46:34 -04:00
Ayaz Hafiz
04ee74542d
Rename IncompleteAbility
2022-07-26 20:46:34 -04:00
Ayaz Hafiz
c0d26226dd
Remove deferred obligation for opaques during solving
2022-07-26 20:46:34 -04:00
Ayaz Hafiz
c1dbffdad9
Make sure wrong specializations become error types
2022-07-26 20:46:34 -04:00
Ayaz Hafiz
3703940da9
Report specializations that target the unexpected type
2022-07-26 20:46:34 -04:00
Ayaz Hafiz
968bd468a8
Use proper members in checking derive keys
2022-07-26 20:46:33 -04:00
Ayaz Hafiz
f2cf7405df
Revert "Use abilities ImplKey in solve"
...
This reverts commit b7cb0003134f1b0c657d7173db6965b4247500aa.
2022-07-26 20:46:33 -04:00
Ayaz Hafiz
254d684dfa
Use abilities ImplKey in solve
2022-07-26 20:46:33 -04:00
Ayaz Hafiz
28c1a4cb95
Use ImplKey in abilities store public API
2022-07-26 20:46:33 -04:00
Ayaz Hafiz
51bce825fb
Properly record all erroring ability implementations
2022-07-25 11:30:03 -04:00
Ayaz Hafiz
0525c6d616
Import both specializations and declared ability mappings
2022-07-25 10:06:49 -04:00
Ayaz Hafiz
e2454f497f
Store declared implementations, both custom and derived, in abilities store
2022-07-25 09:09:01 -04:00
Ayaz Hafiz
6035e45f25
Store derivable ability members statically
2022-07-25 09:09:00 -04:00
Folkert de Vries
860df057dc
Merge pull request #3600 from rtfeldman/i3298
...
Various improvements to is-open constraints/catch-all branches in patterns
2022-07-23 12:49:35 +02:00
Ayaz Hafiz
5ad04dcd2c
Emit runtime error when tag unions have an error type
...
Closes #3266
2022-07-22 15:46:09 -04:00
Ayaz Hafiz
d4cf9b8f8d
Apply is-open constraints to nested types
...
Closes #3459
2022-07-22 12:57:27 -04:00
Folkert de Vries
ca38ec4eb5
Merge pull request #3541 from rtfeldman/rocasync
...
Changes to get roc-async working
2022-07-18 19:22:07 +02:00
Ayaz Hafiz
eb2012dcad
Typos
2022-07-15 10:39:10 -04:00
Ayaz Hafiz
2e20441157
Num * can't be derived for encoding, but concrete numbers can be
2022-07-15 10:39:09 -04:00
Ayaz Hafiz
7b23077265
Treat numbers as ad-hoc types for the purpose of checking ability obligations
2022-07-15 10:39:09 -04:00
Ayaz Hafiz
c98ba441cf
Properly handle immediate derivations
2022-07-15 10:38:11 -04:00
Ayaz Hafiz
e91247a64d
Store ability member lambda sets in storage subs
2022-07-15 10:38:11 -04:00
Folkert de Vries
460b822caa
Merge pull request #3501 from rtfeldman/derive-tag-union-encoding-gen
...
Derive tag union encoding gen
2022-07-15 15:57:41 +02:00
Ayaz Hafiz
161c2101a7
Properly link lambda set variables in host exposed aliases
2022-07-14 12:20:39 -04:00
Folkert de Vries
1b1b63aad0
Merge branch 'trunk' into assoc-list-dict
2022-07-14 16:47:50 +02:00
Ayaz Hafiz
1cf1e114be
Derive tag union encoders
2022-07-14 08:49:45 -04:00
Folkert
88a9fab865
clippy
2022-07-14 08:56:23 +02:00
Ayaz Hafiz
71b078d2dc
Clone delayed type alias when there are equivalent type variables
2022-07-13 16:18:03 -04:00
Ayaz Hafiz
fe63140047
Clippy
2022-07-13 08:47:40 -04:00
Ayaz Hafiz
76f7843c93
Enforce some simplifications
2022-07-13 08:47:40 -04:00