summaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorSimon Peyton Jones <simonpj@microsoft.com>2015-05-07 09:07:51 +0100
committerSimon Peyton Jones <simonpj@microsoft.com>2015-06-11 13:32:27 +0100
commitddbb97d00fdbc5870a4076ed15af8e607b161cb2 (patch)
treeefc9b18c9786fa059e0ff8999a790e24f82ecb60 /docs
parentca39b96ee783e124909a89ea3ad366bf99defa7b (diff)
downloadhaskell-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.xml12
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>