[project @ 2004-10-01 11:12:30 by simonpj]
[ghc-hetmet.git] / ghc / compiler / coreSyn / PprCore.lhs
index 29a822a..ec52bb6 100644 (file)
@@ -153,11 +153,12 @@ ppr_expr add_par expr@(App fun arg)
        other -> add_par (hang (pprParendExpr fun) 2 pp_args)
     }
 
-ppr_expr add_par (Case expr var [(con,args,rhs)])
+-- gaw 2004
+ppr_expr add_par (Case expr var ty [(con,args,rhs)])
   = add_par $
-    sep [sep [ptext SLIT("case") <+> pprCoreExpr expr,
+    sep [sep [ptext SLIT("case") <+> parens (ppr ty) <+> pprCoreExpr expr,
              hsep [ptext SLIT("of"),
-                   ppr_bndr var,
+                   ppr_bndr var, 
                    char '{',
                    ppr_case_pat con args
          ]],
@@ -167,9 +168,10 @@ ppr_expr add_par (Case expr var [(con,args,rhs)])
   where
     ppr_bndr = pprBndr CaseBind
 
-ppr_expr add_par (Case expr var alts)
+-- gaw 2004
+ppr_expr add_par (Case expr var ty alts)
   = add_par $
-    sep [sep [ptext SLIT("case") <+> pprCoreExpr expr,
+    sep [sep [ptext SLIT("case") <+> parens (ppr ty) <+> pprCoreExpr expr,
              ptext SLIT("of") <+> ppr_bndr var <+> char '{'],
         nest 2 (sep (punctuate semi (map pprCoreAlt alts))),
         char '}'
@@ -275,7 +277,7 @@ pprCoreBinder LetBind binder
     pragmas = ppIdInfo binder (idInfo binder)
 
 -- Lambda bound type variables are preceded by "@"
-pprCoreBinder LambdaBind bndr = pprTypedBinder bndr
+pprCoreBinder LambdaBind bndr = parens (pprTypedBinder bndr)
 
 -- Case bound things don't get a signature or a herald
 pprCoreBinder CaseBind bndr = pprUntypedBinder bndr
@@ -287,12 +289,6 @@ pprUntypedBinder binder
 pprTypedBinder binder
   | isTyVar binder  = ptext SLIT("@") <+> pprTyVarBndr binder
   | otherwise      = pprIdBndr binder <+> dcolon <+> pprType (idType binder)
-       -- The space before the :: is important; it helps the lexer
-       -- when reading inferfaces.  Otherwise it would lex "a::b" as one thing.
-       --
-       -- It's important that the type is parenthesised too, at least when
-       -- printing interfaces, because we get \ x::(a->b) y::(c->d) -> ...
-       --      [Jun 2002: interfaces are now binary, so this doesn't matter]
 
 pprTyVarBndr :: TyVar -> SDoc
 pprTyVarBndr tyvar