Loosen the syntax of types slightly
authorsimonpj@microsoft.com <unknown>
Mon, 17 Sep 2007 16:07:08 +0000 (16:07 +0000)
committersimonpj@microsoft.com <unknown>
Mon, 17 Sep 2007 16:07:08 +0000 (16:07 +0000)
This change allows you to write
f :: (Eq a) => (Ord b) => a -> b -> b
Previously you could only have a forall and context after '->'
but not after '=>' which is strange and inconsistent.

Making the parser a bit more generous didn't change the number
of shift/reduce conflicts.

tc236 tests.

compiler/parser/Parser.y.pp

index bfd0525..2bfb895 100644 (file)
@@ -971,7 +971,7 @@ gentypedoc :: { LHsType RdrName }
 
 ctypedoc  :: { LHsType RdrName }
         : 'forall' tv_bndrs '.' ctypedoc { LL $ mkExplicitHsForAllTy $2 (noLoc []) $4 }
-        | context '=>' gentypedoc        { LL $ mkImplicitHsForAllTy   $1 $3 }
+        | context '=>' ctypedoc          { LL $ mkImplicitHsForAllTy   $1 $3 }
        -- A type of form (context => type) is an *implicit* HsForAllTy
        | gentypedoc                     { $1 }