* The MultipleSyms error should only show up when the import environment
contains duplicate symbols, and should be triggered lazily.
* Environments that have had errors reported should be rewritten to no longer
produce those errors during renameVar/renameType
Fixes#337
The local type bindings from type annotations in patterns were not being
processed correctly, and built-in type/type-functions were getting shadowed in
binders.
Although this does reduce garbage produced when evaluating, it is a
major slowdown on some typechecking tasks (in particular, the typechecking
of large arrays of literals).
Although this does reduce garbage produced when evaluating, it is a
major slowdown on some typechecking tasks (in particular, the typechecking
of large arrays of literals).
Previously, there was a mistake in this definition that was throwing
away potentially-useful work. We now preserve that work and get a bit
performance improvement as a result.
Now, substitions are explicitly a sequence of maps from variables
to types. This means that composing substitions is nearly trivial
because the structure of maps does not need to be rebuilt. Instead,
we traverse the sequence of maps when substituions are applied.
This significantly reduces the garbage produced by type substituion.
Now, substitions are explicitly a sequence of maps from variables
to types. This means that composing substitions is nearly trivial
because the structure of maps does not need to be rebuilt. Instead,
we traverse the sequence of maps when substituions are applied.
This significantly reduces the garbage produced by type substituion.
To get acceptable performance, we need to be pretty aggressive about
using word representations instead of list-of-bits. Unfortunately,
with the new evaluator, this means we force things to be more strict
than is correct.
We are also still slower than the current evaluator. It is not
clear where the problems are.
In particular, the following keywords will now be suggested by
the REPL autocompletion:
else, if, let, then, where
These, I believe, are the only keywords which can be entered at
the command line.
Fixes#144