Commit 89e484f7 authored by simonpj@microsoft.com's avatar simonpj@microsoft.com

Improve pretty-printing of family instances

Fixed Trac #4246
parent 07c01d09
......@@ -88,15 +88,23 @@ pprFamInst famInst
2 (ptext (sLit "--") <+> pprNameLoc (getName famInst))
pprFamInstHdr :: FamInst -> SDoc
pprFamInstHdr (FamInst {fi_fam = fam, fi_tys = tys, fi_tycon = tycon})
= pprTyConSort <+> pprHead
pprFamInstHdr (FamInst {fi_tycon = rep_tc})
= pprTyConSort <+> pp_instance <+> pprHead
where
pprHead = pprTypeApp fam tys
pprTyConSort | isDataTyCon tycon = ptext (sLit "data instance")
| isNewTyCon tycon = ptext (sLit "newtype instance")
| isSynTyCon tycon = ptext (sLit "type instance")
| isAbstractTyCon tycon = ptext (sLit "data instance")
| otherwise = panic "FamInstEnv.pprFamInstHdr"
Just (fam_tc, tys) = tyConFamInst_maybe rep_tc
-- For *associated* types, say "type T Int = blah"
-- For *top level* type instances, say "type instance T Int = blah"
pp_instance
| isTyConAssoc fam_tc = empty
| otherwise = ptext (sLit "instance")
pprHead = pprTypeApp fam_tc tys
pprTyConSort | isDataTyCon rep_tc = ptext (sLit "data")
| isNewTyCon rep_tc = ptext (sLit "newtype")
| isSynTyCon rep_tc = ptext (sLit "type")
| isAbstractTyCon rep_tc = ptext (sLit "data")
| otherwise = panic "FamInstEnv.pprFamInstHdr"
pprFamInsts :: [FamInst] -> SDoc
pprFamInsts finsts = vcat (map pprFamInst finsts)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment