diff options
author | Simon Peyton Jones <simonpj@microsoft.com> | 2015-05-07 09:07:51 +0100 |
---|---|---|
committer | Simon Peyton Jones <simonpj@microsoft.com> | 2015-06-11 13:32:27 +0100 |
commit | ddbb97d00fdbc5870a4076ed15af8e607b161cb2 (patch) | |
tree | efc9b18c9786fa059e0ff8999a790e24f82ecb60 /docs | |
parent | ca39b96ee783e124909a89ea3ad366bf99defa7b (diff) | |
download | haskell-ddbb97d00fdbc5870a4076ed15af8e607b161cb2.tar.gz |
Another major improvement of "improvement"
I wasn't very happy with my fix to Trac #10009. This is much better.
The main idea is that the inert set now contains a "model", which
embodies *all* the (nominal) equalities that we know about, with
a view to exposing unifications. This requires a lot fewer iterations
of the solver than before.
There are extensive comments in
TcSMonad: Note [inert_model: the inert model]
Note [Adding an inert canonical constraint the InertCans]
The big changes are
* New inert_model field in InertCans
* Functions addInertEq, addInertCan deal with adding a
constraint, maintaining the model
* A nice improvement is that unification variables can
unify with fmvs, so that from, say alpha ~ fmv
we get alpha := fmv
See Note [Orientation of equalities with fmvs] in TcFlatten
It's still not perfect, as the Note explains
New flag -fconstraint-solver-iterations=n, allows us to control
the number of constraint solver iterations, and in particular
will flag up when it's more than a small number.
Performance is generally slightly better:
T5837 is a lot better for some reason.
Diffstat (limited to 'docs')
-rw-r--r-- | docs/users_guide/flags.xml | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/docs/users_guide/flags.xml b/docs/users_guide/flags.xml index de6c2c8ed8..04157b10bb 100644 --- a/docs/users_guide/flags.xml +++ b/docs/users_guide/flags.xml @@ -712,8 +712,18 @@ </thead> <tbody> <row> + <entry><option>-fconstraint-solver-iterations=</option><replaceable>n</replaceable></entry> + <entry>Set the iteration limit for the type-constraint solver. + The default limit is 4. Typically one iteration + suffices; so please yell if you find you need to set + it higher than the default. Zero means infinity. </entry> + <entry>dynamic</entry> + <entry></entry> + </row> + <row> <entry><option>-freduction-depth=</option><replaceable>n</replaceable></entry> - <entry>set the <link linkend="undecidable-instances">limit for type simplification</link>. Default is 200.</entry> + <entry>Set the <link linkend="undecidable-instances">limit for type simplification</link>. + Default is 200; zero means infinity.</entry> <entry>dynamic</entry> <entry></entry> </row> |