From: simonpj@microsoft.com Date: Wed, 26 Nov 2008 13:22:02 +0000 (+0000) Subject: Fix Trac #2766: printing operator type variables X-Git-Tag: 2009-03-13~398 X-Git-Url: http://git.megacz.com/?a=commitdiff_plain;h=3256860dc70f3a4fbd953c858ec500d70a9be820;p=ghc-hetmet.git Fix Trac #2766: printing operator type variables --- diff --git a/compiler/types/TypeRep.lhs b/compiler/types/TypeRep.lhs index 52e12bf..f71606e 100644 --- a/compiler/types/TypeRep.lhs +++ b/compiler/types/TypeRep.lhs @@ -462,7 +462,9 @@ pprKind = pprType pprParendKind = pprParendType ppr_type :: Prec -> Type -> SDoc -ppr_type _ (TyVarTy tv) = ppr tv +ppr_type _ (TyVarTy tv) -- Note [Infix type variables] + | isSymOcc (getOccName tv) = parens (ppr tv) + | otherwise = ppr tv ppr_type _ (PredTy pred) = ifPprDebug (ptext (sLit "")) <> (ppr pred) ppr_type p (TyConApp tc tys) = ppr_tc_app p tc tys @@ -553,3 +555,24 @@ pprTvBndr tv | isLiftedTypeKind kind = ppr tv kind = tyVarKind tv \end{code} +Note [Infix type variables] +~~~~~~~~~~~~~~~~~~~~~~~~~~~ +In Haskell 98 you can say + + f :: (a ~> b) -> b + +and the (~>) is considered a type variable. However, the type +pretty-printer in this module will just see (a ~> b) as + + App (App (TyVarTy "~>") (TyVarTy "a")) (TyVarTy "b") + +So it'll print the type in prefix form. To avoid confusion we must +remember to parenthesise the operator, thus + + (~>) a b -> b + +See Trac #2766. + + + +