[Template-haskell] pprDec bug
Simon Peyton-Jones
simonpj at microsoft.com
Wed May 19 09:44:24 EDT 2004
| 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
More information about the template-haskell
mailing list