summaryrefslogtreecommitdiff
path: root/compiler/hsSyn/HsDecls.hs
diff options
context:
space:
mode:
authorRichard Eisenberg <eir@cis.upenn.edu>2015-09-20 16:03:07 -0400
committerRichard Eisenberg <eir@cis.upenn.edu>2015-09-20 21:39:16 -0400
commit6a2092050c14570b9131fb5189c96dc562713b4c (patch)
tree936e0ef0e569085fa67af6d0ec7c711ef052d241 /compiler/hsSyn/HsDecls.hs
parent93fafe057da20c40ff0a0f383e3341cac6aaee23 (diff)
downloadhaskell-6a2092050c14570b9131fb5189c96dc562713b4c.tar.gz
Small improvement in pretty-printing constructors.
This fixes #10810 by cleaning up pretty-printing of constructor declarations. This change also removes a (in my opinion) deeply bogus orphan instance OutputableBndr [Located name], making HsDecls now a non-orphan module. Yay all around. Test case: th/T10810
Diffstat (limited to 'compiler/hsSyn/HsDecls.hs')
-rw-r--r--compiler/hsSyn/HsDecls.hs26
1 files changed, 10 insertions, 16 deletions
diff --git a/compiler/hsSyn/HsDecls.hs b/compiler/hsSyn/HsDecls.hs
index 047ad14ae0..ecc36937da 100644
--- a/compiler/hsSyn/HsDecls.hs
+++ b/compiler/hsSyn/HsDecls.hs
@@ -12,7 +12,6 @@
-- in module PlaceHolder
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE FlexibleInstances #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
-- | Abstract syntax of global declarations.
--
@@ -1114,15 +1113,16 @@ instance (OutputableBndr name) => Outputable (ConDecl name) where
ppr = pprConDecl
pprConDecl :: OutputableBndr name => ConDecl name -> SDoc
-pprConDecl (ConDecl { con_names = cons, con_explicit = expl, con_qvars = tvs
+pprConDecl (ConDecl { con_names = [L _ con] -- NB: non-GADT means 1 con
+ , con_explicit = expl, con_qvars = tvs
, con_cxt = cxt, con_details = details
, con_res = ResTyH98, con_doc = doc })
= sep [ppr_mbDoc doc, pprHsForAll expl tvs cxt, ppr_details details]
where
- ppr_details (InfixCon t1 t2) = hsep [ppr t1, pprInfixOcc cons, ppr t2]
- ppr_details (PrefixCon tys) = hsep (pprPrefixOcc cons
+ ppr_details (InfixCon t1 t2) = hsep [ppr t1, pprInfixOcc con, ppr t2]
+ ppr_details (PrefixCon tys) = hsep (pprPrefixOcc con
: map (pprParendHsType . unLoc) tys)
- ppr_details (RecCon fields) = ppr_con_names cons
+ ppr_details (RecCon fields) = pprPrefixOcc con
<+> pprConDeclFields (unLoc fields)
pprConDecl (ConDecl { con_names = cons, con_explicit = expl, con_qvars = tvs
@@ -1146,18 +1146,12 @@ pprConDecl decl@(ConDecl { con_details = InfixCon ty1 ty2, con_res = ResTyGADT {
-- so if we ever trip over one (albeit I can't see how that
-- can happen) print it like a prefix one
-ppr_con_names :: (OutputableBndr name) => [Located name] -> SDoc
-ppr_con_names [x] = ppr x
-ppr_con_names xs = interpp'SP xs
-
-instance (Outputable name) => OutputableBndr [Located name] where
- pprBndr _bs xs = cat $ punctuate comma (map ppr xs)
+-- this fallthrough would happen with a non-GADT-syntax ConDecl with more
+-- than one constructor, which should indeed be impossible
+pprConDecl (ConDecl { con_names = cons }) = pprPanic "pprConDecl" (ppr cons)
- pprPrefixOcc [x] = ppr x
- pprPrefixOcc xs = cat $ punctuate comma (map ppr xs)
-
- pprInfixOcc [x] = ppr x
- pprInfixOcc xs = cat $ punctuate comma (map ppr xs)
+ppr_con_names :: (OutputableBndr name) => [Located name] -> SDoc
+ppr_con_names = pprWithCommas (pprPrefixOcc . unLoc)
{-
************************************************************************