X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=compiler%2FcoreSyn%2FPprExternalCore.lhs;h=e46a871ca100f1ab7cf82b9f40f48bb5207e8538;hp=dd75b62629d29410f940f606931465167e469fa2;hb=4c6a3f787abcaed009a574196d82237d9ae64fc8;hpb=0a9b1362c9103c17a9f662287fd65c8779bcf4ef diff --git a/compiler/coreSyn/PprExternalCore.lhs b/compiler/coreSyn/PprExternalCore.lhs index dd75b62..e46a871 100644 --- a/compiler/coreSyn/PprExternalCore.lhs +++ b/compiler/coreSyn/PprExternalCore.lhs @@ -54,16 +54,18 @@ ptdef (Data tcon tbinds cdefs) = (text "%data" <+> pqname tcon <+> (hsep (map ptbind tbinds)) <+> char '=') $$ indent (braces ((vcat (punctuate (char ';') (map pcdef cdefs))))) -ptdef (Newtype tcon tbinds (coercion,k) rep) = +ptdef (Newtype tcon tbinds (coercion,tbs,k) rep) = -- Here we take apart the newtype tycon in order to get the newtype coercion, -- which needs to be represented in the External Core file because it's not -- straightforward to derive its definition from the newtype declaration alone. -- At the same time, we need the newtype decl to declare the tycon itself. -- Sigh. text "%newtype" <+> pqname tcon <+> (hsep (map ptbind tbinds)) - <+> axiomclause <+> repclause - where axiomclause = char '^' <+> parens (pqname coercion <+> text "::" - <+> pkind k) + $$ indent (axiomclause $$ repclause) + where axiomclause = char '^' + <+> parens (pqname coercion <+> (hsep (map ptbind tbs)) + <+> text "::" + <+> pkind k) repclause = case rep of Just ty -> char '=' <+> pty ty Nothing -> empty @@ -71,9 +73,9 @@ ptdef (Newtype tcon tbinds (coercion,k) rep) = pcdef :: Cdef -> Doc pcdef (Constr dcon tbinds tys) = - (pname dcon) <+> (sep [hsep (map pattbind tbinds),sep (map paty tys)]) + (pqname dcon) <+> (sep [hsep (map pattbind tbinds),sep (map paty tys)]) pcdef (GadtConstr dcon ty) = - (pname dcon) <+> text "::" <+> pty ty + (pqname dcon) <+> text "::" <+> pty ty pname :: Id -> Doc pname id = text (zEncodeString id) @@ -128,10 +130,10 @@ pvdefg (Rec vdefs) = text "%rec" $$ braces (indent (vcat (punctuate (char ';') ( pvdefg (Nonrec vdef) = pvdef vdef pvdef :: Vdef -> Doc --- note: at one point every vdef was getting printed out as "local". --- I think that's manifestly wrong. Right now, the "%local" keyword --- is never used. -pvdef (_l,v,t,e) = sep [pname v <+> text "::" <+> pty t <+> char '=', +-- TODO: Think about whether %local annotations are actually needed. +-- Right now, the local flag is never used, because the Core doc doesn't +-- explain the meaning of %local. +pvdef (_l,v,t,e) = sep [(pqname v <+> text "::" <+> pty t <+> char '='), indent (pexp e)] paexp, pfexp, pexp :: Exp -> Doc @@ -162,7 +164,7 @@ pappexp e as = fsep (paexp e : map pa as) pexp (Lam b e) = char '\\' <+> plamexp [b] e pexp (Let vd e) = (text "%let" <+> pvdefg vd) $$ (text "%in" <+> pexp e) -pexp (Case e vb ty alts) = sep [text "%case" <+> parens (paty ty) <+> paexp e, +pexp (Case e vb ty alts) = sep [text "%case" <+> paty ty <+> paexp e, text "%of" <+> pvbind vb] $$ (indent (braces (vcat (punctuate (char ';') (map palt alts))))) pexp (Cast e co) = (text "%cast" <+> parens (pexp e)) $$ paty co