type LHsPred name = Located (HsPred name)
-data HsPred name = HsClassP name [LHsType name]
+data HsPred name = HsClassP name [LHsType name] -- class constraint
+ | HsEqualP (LHsType name) (LHsType name)-- equality constraint
| HsIParam (IPName name) (LHsType name)
type LHsType name = Located (HsType name)
%* *
%************************************************************************
-NB: these types get printed into interface files, so
- don't change the printing format lightly
-
\begin{code}
instance (OutputableBndr name) => Outputable (HsType name) where
ppr ty = pprHsType ty
ppr (KindedTyVar name kind) = pprHsTyVarBndr name kind
instance OutputableBndr name => Outputable (HsPred name) where
- ppr (HsClassP clas tys) = ppr clas <+> hsep (map (pprParendHsType.unLoc) tys)
- ppr (HsIParam n ty) = hsep [ppr n, dcolon, ppr ty]
+ ppr (HsClassP clas tys) = ppr clas <+> hsep (map pprLHsType tys)
+ ppr (HsEqualP t1 t2) = hsep [pprLHsType t1, ptext SLIT("~"),
+ pprLHsType t2]
+ ppr (HsIParam n ty) = hsep [ppr n, dcolon, ppr ty]
+
+pprLHsType :: OutputableBndr name => LHsType name -> SDoc
+pprLHsType = pprParendHsType . unLoc
pprHsTyVarBndr :: Outputable name => name -> Kind -> SDoc
pprHsTyVarBndr name kind | isLiftedTypeKind kind = ppr name
= maybeParen ctxt_prec pREC_FUN $
sep [pprHsForAll exp tvs ctxt, ppr_mono_lty pREC_TOP ty]
--- gaw 2004
ppr_mono_ty ctxt_prec (HsBangTy b ty) = ppr b <> ppr ty
ppr_mono_ty ctxt_prec (HsTyVar name) = ppr name
ppr_mono_ty ctxt_prec (HsFunTy ty1 ty2) = ppr_fun_ty ctxt_prec ty1 ty2
ppr_mono_ty ctxt_prec (HsKindSig ty kind) = parens (ppr_mono_lty pREC_TOP ty <+> dcolon <+> pprKind kind)
ppr_mono_ty ctxt_prec (HsListTy ty) = brackets (ppr_mono_lty pREC_TOP ty)
ppr_mono_ty ctxt_prec (HsPArrTy ty) = pabrackets (ppr_mono_lty pREC_TOP ty)
-ppr_mono_ty ctxt_prec (HsPredTy pred) = braces (ppr pred)
+ppr_mono_ty ctxt_prec (HsPredTy pred) = ppr pred
ppr_mono_ty ctxt_prec (HsNumTy n) = integer n -- generics only
ppr_mono_ty ctxt_prec (HsSpliceTy s) = pprSplice s