projects
/
ghc-hetmet.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
ea9fe63
)
Fix Trac #2766: printing operator type variables
author
simonpj@microsoft.com
<unknown>
Wed, 26 Nov 2008 13:22:02 +0000
(13:22 +0000)
committer
simonpj@microsoft.com
<unknown>
Wed, 26 Nov 2008 13:22:02 +0000
(13:22 +0000)
compiler/types/TypeRep.lhs
patch
|
blob
|
history
diff --git
a/compiler/types/TypeRep.lhs
b/compiler/types/TypeRep.lhs
index
52e12bf
..
f71606e
100644
(file)
--- a/
compiler/types/TypeRep.lhs
+++ b/
compiler/types/TypeRep.lhs
@@
-462,7
+462,9
@@
pprKind = pprType
pprParendKind = pprParendType
ppr_type :: Prec -> Type -> SDoc
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 "<pred>")) <> (ppr pred)
ppr_type p (TyConApp tc tys) = ppr_tc_app p tc tys
ppr_type _ (PredTy pred) = ifPprDebug (ptext (sLit "<pred>")) <> (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}
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.
+
+
+
+