Increase -fcontext-stack=N default to 100
authorSimon Peyton Jones <simonpj@microsoft.com>
Tue, 9 Sep 2014 11:52:18 +0000 (12:52 +0100)
committerSimon Peyton Jones <simonpj@microsoft.com>
Fri, 19 Sep 2014 10:41:11 +0000 (11:41 +0100)
This addresses Trac #5395

compiler/main/Constants.lhs
docs/users_guide/flags.xml
testsuite/tests/typecheck/should_fail/TcCoercibleFail.stderr

index a891336..ee126f5 100644 (file)
@@ -18,7 +18,8 @@ mAX_TUPLE_SIZE = 62 -- Should really match the number
                     -- of decls in Data.Tuple
 
 mAX_CONTEXT_REDUCTION_DEPTH :: Int
-mAX_CONTEXT_REDUCTION_DEPTH = 20
+mAX_CONTEXT_REDUCTION_DEPTH = 100
+  -- Trac #5395 reports at least one library that needs depth 37 here
 
 mAX_TYPE_FUNCTION_REDUCTION_DEPTH :: Int
 mAX_TYPE_FUNCTION_REDUCTION_DEPTH = 200
index 086157b..bd2a84c 100644 (file)
         <tbody>
           <row>
             <entry><option>-fcontext-stack=N</option><replaceable>n</replaceable></entry>
-            <entry>set the <link linkend="undecidable-instances">limit for context reduction</link>. Default is 20.</entry>
+            <entry>set the <link linkend="undecidable-instances">limit for type-class context reduction</link>. Default is 100.</entry>
             <entry>dynamic</entry>
             <entry></entry>
           </row>
index 2851bcd..5bb9210 100644 (file)
@@ -1,7 +1,9 @@
 
 TcCoercibleFail.hs:11:8:
     Could not coerce from ‘Int’ to ‘()’
-      because ‘Int’ and ‘()’ are different types.
+      because ‘Int’
+          and ‘()’
+          are different types.
       arising from a use of ‘coerce’
     In the expression: coerce
     In the expression: coerce $ one :: ()
@@ -9,7 +11,9 @@ TcCoercibleFail.hs:11:8:
 
 TcCoercibleFail.hs:14:8:
     Could not coerce from ‘m Int’ to ‘m Age’
-      because ‘m Int’ and ‘m Age’ are different types.
+      because ‘m Int’
+          and ‘m Age’
+          are different types.
       arising from a use of ‘coerce’
     from the context (Monad m)
       bound by the type signature for foo2 :: Monad m => m Age
@@ -36,24 +40,26 @@ TcCoercibleFail.hs:18:8:
     In an equation for ‘foo4’: foo4 = coerce $ one :: Down Int
 
 TcCoercibleFail.hs:21:8:
-    Context reduction stack overflow; size = 21
+    Context reduction stack overflow; size = 101
     Use -fcontext-stack=N to increase stack size to N
       Coercible Void ()
     In the expression: coerce :: Void -> ()
     In an equation for ‘foo5’: foo5 = coerce :: Void -> ()
 
 TcCoercibleFail.hs:30:8:
-    Context reduction stack overflow; size = 21
+    Context reduction stack overflow; size = 101
     Use -fcontext-stack=N to increase stack size to N
-      Coercible Int Age
+      Coercible
+        (Either Int (Fix (Either Int))) (Either Age (Fix (Either Age)))
     In the expression: coerce :: Fix (Either Int) -> Fix (Either Age)
     In an equation for ‘foo6’:
         foo6 = coerce :: Fix (Either Int) -> Fix (Either Age)
 
 TcCoercibleFail.hs:31:8:
     Could not coerce from ‘Either Int (Fix (Either Int))’ to ‘()’
-      because ‘Either
-                 Int (Fix (Either Int))’ and ‘()’ are different types.
+      because ‘Either Int (Fix (Either Int))’
+          and ‘()’
+          are different types.
       arising from a use of ‘coerce’
     In the expression: coerce :: Fix (Either Int) -> ()
     In an equation for ‘foo7’: foo7 = coerce :: Fix (Either Int) -> ()