Commit graph

218 commits

Author SHA1 Message Date
Anton-4
a97c53d7ca
1.65 changes and clippy fixes 2023-01-17 18:09:16 +01:00
Ayaz Hafiz
5fceb9ceb7
Push implicit openness vars through 2023-01-16 10:52:23 -06:00
Ayaz Hafiz
95dae5036a
Weaken top-level mutually recursive let bindings as appropriate 2023-01-16 10:49:17 -06:00
Ayaz Hafiz
a77f04cd19
Weaken mutually-recursive let bindings as appropriate 2023-01-16 10:49:17 -06:00
Ayaz Hafiz
58081ada19
Weaken aliased variable names 2023-01-16 10:49:17 -06:00
Ayaz Hafiz
c3f1646274
Weaken ability members behind let-bindings 2023-01-16 10:49:17 -06:00
Ayaz Hafiz
48049ed956
Weaken tags behind let bindings 2023-01-16 10:49:17 -06:00
Ayaz Hafiz
52c2f3a054
Weaken zero-argument tags in let bindings 2023-01-16 10:49:16 -06:00
Ayaz Hafiz
d9da945283
Allow generalization of annotations with no implementation 2023-01-14 15:33:54 +01:00
Ayaz Hafiz
ab796d93ff
Format 2023-01-14 15:33:54 +01:00
Ayaz Hafiz
df90baa0fc
Weaken runtime errors 2023-01-14 15:33:53 +01:00
Ayaz Hafiz
e525726be6
Weaken typed holes 2023-01-14 15:33:53 +01:00
Ayaz Hafiz
20b4f290ce
Weaken expect/dbg behind let bindings 2023-01-14 15:33:53 +01:00
Ayaz Hafiz
354765afca
Explain why opaque wrap functions need not be weakened behind lets 2023-01-14 15:33:52 +01:00
Ayaz Hafiz
6dca92e420
Weaken record updates behind let bindings 2023-01-14 15:33:52 +01:00
Ayaz Hafiz
2e36e2f418
Don't weaken accessor functions
Accessor functions are equivalent to closures and hence obey function
semantics, no need to weaken them
2023-01-14 15:33:52 +01:00
Ayaz Hafiz
0a9155d9d8
Weaken record accesses 2023-01-14 15:33:51 +01:00
Ayaz Hafiz
b5cce17822
Weaken crash 2023-01-14 15:33:51 +01:00
Ayaz Hafiz
b8712bcb30
Weaken records in let-bindings
This change also means we must update the interface of `Dict.empty` and
`Set.empty` from

```
Dict.empty : Dict k v
```

to

```
Dict.empty : {} -> Dict k v
```
2023-01-14 15:33:51 +01:00
Ayaz Hafiz
61ac9bf9b2
Weaken binding empty records 2023-01-14 15:33:50 +01:00
Ayaz Hafiz
64f979a826
Weaken foreign calls 2023-01-14 15:33:50 +01:00
Ayaz Hafiz
b3acbdfdfd
Weaken run-low-level 2023-01-14 15:33:50 +01:00
Ayaz Hafiz
cb1373a3a4
Weaken let-binding calls 2023-01-14 15:33:49 +01:00
Ayaz Hafiz
d27a72de1f
Weaken let sequences under let binding 2023-01-14 15:33:49 +01:00
Ayaz Hafiz
e36f90feec
Weaken recursive let bindings 2023-01-14 15:33:49 +01:00
Ayaz Hafiz
2e41b59af4
Format 2023-01-12 10:02:21 -06:00
Ayaz Hafiz
04cf7e070d
Weaken let-bindings to if expressions 2023-01-12 10:02:21 -06:00
Ayaz Hafiz
9462f44bb7
Weaken variables bound to when expressions 2023-01-12 10:02:21 -06:00
Ayaz Hafiz
a2f04d1fa3
Weaken single quotes 2023-01-12 10:02:21 -06:00
Ayaz Hafiz
b2cdddbdfb
Weaken lists 2023-01-12 10:02:20 -06:00
Ayaz Hafiz
caa3a6c6a8
Weaken strings 2023-01-12 10:01:56 -06:00
Ayaz Hafiz
173d070175
Weaken expects 2023-01-12 10:01:56 -06:00
Ayaz Hafiz
31f3caef74
stand by Kawhi being the best 2023-01-11 14:30:38 -06:00
Ayaz Hafiz
058644aa96
Implement weakening of variables introduced in branch patterns
Variables introduced in branch patterns should never be generalized in
the new weakening model. This implements that. The strategy is:

- when we have a let-binding that should be weakened, do not introduce
  its bound variables in a new (higher) rank
- instead, introduce them at the current rank, and also solve the
  let-binding at the current rank
- if any of those variables should then be generalized relative to the
  current rank, they will be so when the current rank is popped and
  generalized
2023-01-11 14:28:46 -06:00
Ayaz Hafiz
5db82ad965
Explain why we currently cannot mark degeneralization in when headers 2023-01-11 14:28:46 -06:00
Ayaz Hafiz
cb18291aa8
Loosen weakening restriction for now 2023-01-11 14:28:45 -06:00
Ayaz
7c61d0d278
Merge pull request #4843 from roc-lang/pattern-as-can
Pattern as can
2023-01-08 19:36:40 -06:00
Folkert
c2ddeb0de0
fix and test as pattern type inference 2023-01-08 16:40:03 +01:00
Folkert
57f2233278
cleanup 2023-01-08 15:47:56 +01:00
Ayaz Hafiz
bcfb258db8
Add a bit to mark syntactically-generalizable types 2023-01-04 17:02:20 -06:00
Folkert
905341d849
can for normal (no-list) as 2022-12-31 15:46:11 +01:00
Ayaz Hafiz
bd06714fd2
Make sure to constrain dbgs with existential correctly 2022-12-14 17:02:29 -06:00
Ayaz Hafiz
25693f8ffe
Fix constraining 2022-11-24 14:46:50 -06:00
Ayaz Hafiz
e2b30e5301
Constrain + solve crash 2022-11-24 14:46:50 -06:00
Ayaz Hafiz
9dc489c2b0
First pass constraining crash 2022-11-24 14:46:49 -06:00
Ayaz Hafiz
b4216a26a5
Force occurs check for introduced types after checking annotated bodies
The current type inference scheme is such that we first introduce the
types for annotation functions, then check their bodies without
additional re-generalization. As part of generalization, we also perform
occurs checks to fix-up recursive tag unions.

However, type annotations can contain type inference variables that are
neither part of the generalization scheme, nor are re-generalized later
on, and in fact end up forming a closure of a recursive type. If we do
not catch and break such closures into recursive types, things go bad
soon after in later stages of the compiler.

To deal with this, re-introduce the values of recursive values after we
check their definitions, forcing an occurs check. This introduction is
benign because we already generalized appropriate type variables anyway.
Though, the introduction is somewhat unnecessary, and I have ideas on
how to make all of this simpler and more performant. That will come in
the future.
2022-11-24 10:05:28 -05:00
Ayaz Hafiz
5efdecafc9
Constrain flex inference variables without re-generalization
When constraining a recursive function like

```
f : _ -> {}
f : \_ -> f {}
```

our first step is to solve the value type of `f` relative to its
annotation. We have to be careful that the inference variable in the
signature of `f` is not generalized until after the body of `f` is
solved. Otherwise, we end up admitting polymorphic recursion.
2022-11-24 10:05:25 -05:00
Folkert
e44a8a9eed
print all the relevant info 2022-11-23 22:58:58 +01:00
Folkert
e7f3c6f281
inline dbg 2022-11-23 21:23:28 +01:00
Folkert
dcb530d3af
Revert "toplevel debug"
This reverts commit 5ea8d96f3e.
2022-11-23 20:29:55 +01:00