[GHC] #779: small bugs in Language.Haskell.TH.Ppr.pprint

GHC trac at galois.com
Sun May 28 07:12:48 EDT 2006


#779: small bugs in Language.Haskell.TH.Ppr.pprint
----------------------------------------+-----------------------------------
  Reporter:  skata at cs.miyazaki-u.ac.jp  |          Owner:          
      Type:  bug                        |         Status:  new     
  Priority:  normal                     |      Milestone:  6.4.2   
 Component:  Template Haskell           |        Version:  6.5     
  Severity:  minor                      |       Keywords:          
Difficulty:  Easy (1 hr)                |   Architecture:  Multiple
        Os:  Multiple                   |  
----------------------------------------+-----------------------------------
Thank you very much for developing GHC. I would like to report two small
 bugs and
 my patch for them.

 (These problems apply at least to 6.4.1, 6.4.2, and the current 6.5 in the
 darcs repository)

 Problem 1:
 pprint does not deal with parentheses of types of higher-order functions
 correctly, i.e.:

 [skata at mermaid]~% ghci -fth -v0[[BR]]
 Prelude> Language.Haskell.TH.runQ [t| (Int->Int)->Int |] >>= \e ->
 putStrLn (Language.Haskell.TH.pprint e)[[BR]]
 Loading package template-haskell-1.0 ... linking ... done.[[BR]]
 GHC.Base.Int -> GHC.Base.Int -> GHC.Base.Int

 I believe '(GHC.Base.Int -> GHC.Base.Int) -> GHC.Base.Int' should be
 printed.

 Problem 2:
 pprint does not parenthesize operators used as functions, e.g.:

 Prelude> Language.Haskell.TH.runQ [| (.) id id |] >>= \e -> putStrLn
 (Language.Haskell.TH.pprint e)[[BR]]
 GHC.Base.. GHC.Base.id GHC.Base.id

 I think 'GHC.Base..' should be parenthesized.

 Patch:
 Hopefully the following patch works (at least for me):

 `== running darcs whatsnew in libraries/template-haskell`[[BR]]
 `{`[[BR]]
 `hunk ./Language/Haskell/TH/Ppr.hs 42`[[BR]]
 `-    ppr v = pprName v -- text (show v)`[[BR]]
 `+    ppr v = case nameBase v of c:_ | c `elem`
 "!#$%&~=|+*<>?-^@:./\\"`[[BR]]
 `+                                       -> parens (pprName v)`[[BR]]
 `+                              _                -> pprName v`[[BR]]
 `hunk ./Language/Haskell/TH/Ppr.hs 289`[[BR]]
 `-pprTyApp (ArrowT, [arg1,arg2]) = sep [ppr arg1 <+> text "->", ppr
 arg2]`[[BR]]
 `+pprTyApp (ArrowT, [arg1,arg2]) = sep [ppr' arg1 <+> text "->", ppr
 arg2]`[[BR]]
 `+  where ppr' t = case split t of (ArrowT, [_,_]) -> parens (ppr
 t)`[[BR]]
 `+                                _               -> ppr t`[[BR]]
 `}`[[BR]]

 Best regards,

-- 
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/779>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the Glasgow-haskell-bugs mailing list