7
- explain our module system
8
- why we think it's good
13
- talk about implementation
19
+ separate scope checking and type checking
21
- describe the module system (simplified?)
24
- using/hiding/renaming
26
- parameterised modules
27
- separate typechecking
30
- describe the implementation
32
+ the view of the type checker
34
- demo (the prototype)
35
+ look at the result of scope checking
36
+ look at the result of type checking
39
+ look at a real example
41
Before scope checking:
43
Unmodified source program (local names, hierarchical modules)
51
Still hierarchical module structure
54
- keeps track of renamings
55
- basically keeps a map from local name to fully qualified name
57
Maybe scope checking should flatten the module space? No, instantiating a
58
module would be a problem then. Or would it? We already perform all kinds of
59
tricks when instantiating modules. Let's try.
64
- A.B.C -> { f, g, h }
67
Flatten modules at scope checking
68
---------------------------------
70
What do we need to keep?
71
- parameterised modules (to avoid re-type checking parameters)
72
- module instantiations
91
and type checking then produces
96
type checking a section is very simple (just abstract the telescope)
98
type checking a module instantiation of A will instantiate all modules with
99
prefix A (A, A.M.P, ..)
101
How does renaming work at the moment?
102
-------------------------------------
104
- it's completely ignore at type checking
106
vim: sts=2 sw=2 tw=80