Hello. I'm Yoshikuni Jujo.
I want to correct ppr_dec of Language.Haskell.TH.Ppr.
Now:
ppr $ FunD (mkName "$$") [Clause [] (NormalB $ VarE $ mkName "x") []]
=> $$ = x
but I want:
ppr $ FunD (mkName "$$") [Clause [] (NormalB $ VarE $ mkName "x") []]
=> ($$) = x
I'll send patch.
--
module Language.Haskell.TH.Ppr
...
isOp :: String -> Bool
isOp = all (`elem` "!#$%&*+./<=>?@\\^|-~:")
ppr_dec _ (FunD f cs)
| isOp $ nameBase f = vcat $ map (\c -> parens (ppr f) <+> ppr c) cs
| otherwise = vcat ...
...
ppr_dec _ (SigD f t)
| isOp $ nameBase f = parens (ppr f) <+> text "::" <+> ppr t
| otherwise = ppr f ...
diff --git a/Language/Haskell/TH/Ppr.hs b/Language/Haskell/TH/Ppr.hs
index 4096d9e..78d422a 100644
--- a/Language/Haskell/TH/Ppr.hs
+++ b/Language/Haskell/TH/Ppr.hs
@@ -239,7 +239,11 @@ instance Ppr Dec where
ppr_dec :: Bool -- declaration on the toplevel?
-> Dec
-> Doc
-ppr_dec _ (FunD f cs) = vcat $ map (\c -> ppr f <+> ppr c) cs
+ppr_dec _ (FunD f cs)
+ | isOp $ nameBase f = vcat $ map (\c -> parens (ppr f) <+> ppr c) cs
+ | otherwise = vcat $ map (\c -> ppr f <+> ppr c) cs
+ where
+ isOp = all (`elem` "!#$%&*+./<=>?@\\^|-~:")
ppr_dec _ (ValD p r ds) = ppr p <+> pprBody True r
$$ where_clause ds
ppr_dec _ (TySynD t xs rhs)
@@ -253,7 +257,11 @@ ppr_dec _ (ClassD ctxt c xs fds ds)
$$ where_clause ds
ppr_dec _ (InstanceD ctxt i ds) = text "instance" <+> pprCxt ctxt <+> ppr i
$$ where_clause ds
-ppr_dec _ (SigD f t) = ppr f <+> text "::" <+> ppr t
+ppr_dec _ (SigD f t)
+ | isOp $ nameBase f = parens (ppr f) <+> text "::" <+> ppr t
+ | otherwise = ppr f <+> text "::" <+> ppr t
+ where
+ isOp = all (`elem` "!#$%&*+./<=>?@\\^|-~:")
ppr_dec _ (ForeignD f) = ppr f
ppr_dec _ (InfixD fx n) = pprFixity n fx
ppr_dec _ (PragmaD p) = ppr p
_______________________________________________
ghc-devs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/ghc-devs