The goal of this PR is to make the TIR graph resolver and typechecker flexible enough to support the following use cases:
Typechecking extend blocks
(if I'm feeling ambitious) Change the semantics of type 3 dependencies, such that all statements in a function need to be typechecked only if it is about to be evaluated.
Translation to terms the graph resolver can understand: if there is type 4 dependency between some item a and another item b, then I need to traverse the dependencies of b to find any type 3 dependencies that exist. These all must be put into a unit strictly before the unit that a is put into.
The goal of this PR is to make the TIR graph resolver and typechecker flexible enough to support the following use cases:
extend
blocksa
and another itemb
, then I need to traverse the dependencies ofb
to find any type 3 dependencies that exist. These all must be put into a unit strictly before the unit thata
is put into.