shithub: MicroHs

Download patch

ref: ea5764bbd269195ac3b48433a151c23444924c5b
parent: 3b8e0aad66dc7b51b98324fefafce6e0d85fa8e6
author: Lennart Augustsson <lennart.augustsson@epicgames.com>
date: Sun Oct 22 15:21:13 EDT 2023

Better pretty printing.

--- a/src/MicroHs/Exp.hs
+++ b/src/MicroHs/Exp.hs
@@ -12,11 +12,12 @@
   app2, cCons, cNil, cFlip,
   allVarsExp, freeVars,
   ) where
-import Prelude
+import Prelude --Xhiding((<>))
 import Data.Char
 import Data.List
 import MicroHs.Ident
 import MicroHs.Expr(Lit(..), showLit, eqLit)
+import Text.PrettyPrint.HughesPJ
 --Ximport Control.DeepSeq
 --Ximport Compat
 --Yimport Primitives(NFData(..))
@@ -52,6 +53,9 @@
   | Lit Lit
   --Xderiving (Show, Eq)
 
+--pattern Let :: Ident -> Exp -> Exp -> Exp
+--pattern Let i e b = App (Lam i b) e
+
 --Winstance NFData Exp where rnf (Var i) = rnf i; rnf (App f a) = rnf f `seq` rnf a; rnf (Lam i e) = rnf i `seq` rnf e; rnf (Lit l) = rnf l
 
 eqExp :: Exp -> Exp -> Bool
@@ -174,12 +178,12 @@
 quoteString :: String -> String
 quoteString s =
   let
-    char c =
+    achar c =
       if eqChar c '"' || eqChar c '\\' || ltChar c ' ' || ltChar '~' c then
         '\\' : showInt (ord c) ++ ['&']
       else
         [c]
-  in '"' : concatMap char s ++ ['"']
+  in '"' : concatMap achar s ++ ['"']
 
 encodeString :: String -> Exp
 encodeString [] = cNil
@@ -435,12 +439,16 @@
 -}
 
 showExp :: Exp -> String
-showExp ae =
+showExp = render . ppExp
+
+ppExp :: Exp -> Doc
+ppExp ae =
   case ae of
-    Var i -> showIdent i
-    App f a -> "(" ++ showExp f ++ " " ++ showExp a ++ ")"
-    Lam i e -> "(\\" ++ showIdent i ++ ". " ++ showExp e ++ ")"
-    Lit l -> showLit l
+--    Let i e b -> sep [ text "let" <+> ppIdent i <+> text "=" <+> ppExp e, text "in" <+> ppExp b ]
+    Var i -> ppIdent i
+    App f a -> parens $ ppExp f <+> ppExp a
+    Lam i e -> parens $ text "\\" <> ppIdent i <> text "." <+> ppExp e
+    Lit l -> text (showLit l)
 
 substExp :: Ident -> Exp -> Exp -> Exp
 substExp si se ae =
--