RE: pprDec bug

"Simon Peyton-Jones" <[email protected]>
Newsgroups gmane.comp.lang.haskell.template
Message-ID <4B93206CA3C55D4F96A61C9B1DC80DE3012D8630@EUR-MSG-03.europe.corp.microsoft.com>
| I'm using GHCi version 6.2.1 under Cygwin.  I'm trying to implement a
| compiler that translates a DSL into Haskell; I'd like to build the
| structure incrementally and then use the pretty printer to output the
| target code.  However, the pretty printer does not always produce
| valid output; sometimes needed parentheses are lacking, as in:
| 
|     Main> pprDec $ DataD [] "M" [] [NormalC "M" [(NotStrict, AppT
(ConT Maybe) (ConT "Int"))]] []
|     data M = M Maybe Int

Good point.  I've fixed this in the HEAD, and on the stable branch, so
it'll be in 6.2.2

Prelude Language.Haskell.TH> ppr $ DataD [] (mkName "M") [] [NormalC
(mkName "M") [(NotStrict, AppT (ConT ''Maybe) (ConT ''Int))]] []
data M = M (Data.Maybe.Maybe GHC.Base.Int)

| Related question: I've defined a utility function
| 
| > pdq decq = runQ decq >>= mapM_ print . map pprDec
| 
| so I can pretty-print declarations in code brackets, viz.:
| 
|     Main> pdq [d| data M = M (Maybe Int) |]
| 
| Is there an easy way to transform the declaration to use the
| short forms of type names, e.g. "Int" instead of "GHC.Base:Int"?

That's harder, because it's not clear what qualifications to omit.  All?
But then the program might be ambiguous.  I guess this is so you can
feed it back into GHC, right?  You can always import GHC.Base,
and then you'll be fine.

Still, one could imagine a flag to pprDec (or, more generally, to ppr)
that, say, printed all top-level names unqualified.  But that'd require
a bit of re-plumbing in the pretty-printer to get the flag to the right
place.  

Simon
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.