ref: 19a5372e2fea317bcb1ad5d889b94bb130d0c8e3
parent: 18ef2aba4b756592f3bf5677ea3de1dd50d72c88
author: Lennart Augustsson <lennart@augustsson.net>
date: Thu Nov 2 14:52:54 EDT 2023
Nicer printing.
--- a/comb/mhs.comb
+++ b/comb/mhs.comb
@@ -1,3 +1,3 @@
v4.0
-1196
-((A :0 ((B (B (B (B C)))) ((B (B (B C))) ((B (B C)) P)))) ((A :1 (T (BK (BK (BK K))))) ((A :2 (T (K (BK (BK K))))) ((A :3 (T (K (K (BK K))))) ((A :4 (T (K (K (K K))))) ((A :5 (T (K (K (K A))))) ((A :6 (K (noDefault "Alternative.empty"))) ((A :7 (K (noDefault "Alternative.<|>"))) ((A :8 ((S (((S' S') ((B _14) _1)) (((C' _132) ((B _12) _1)) _240))) _5)) ((A :9 ((S (((S' C') _3) _4)) (((C' _13) _1) _239))) ((A :10 (((S' P) _2) (((C' _13) _1) _957))) ((A :11 ((B (B (B (B C)))) ((B (B (B C))) ((B (B C)) P)))) ((A :12 (T (BK (BK (BK K))))) ((A :13 (T (K (BK (BK K))))) ((A :14 (T (K (K (BK K))))) ((A :15 (T (K (K (K K))))) ((A :16 (T (K (K (K A))))) ((A :17 (K (noDefault "Applicative.pure"))) ((A :18 (K (noDefault "Applicative.<*>"))) ((A :19 (((S' B) _14) (((C' _129) _12) _121))) ((A :20 (((S' B) _14) (((C' _132) _12) _122))) ((A :21 _1029) ((A :22 ((B _1072) _21)) ((A :23 (((S' _1072) _21) I)) ((A :24 _999) ((A :25 (_24 "undefined")) ((A :26 I) ((A :27 (((C' B) _1028) ((C _120) _26))) ((A :28 (((C' _27) ((_128 _1042) _109)) ((_120 (_34 _1044)) _108))) ((A :29 ((B ((S _1072) (_34 _1044))) _24)) ((A :30 ((B (B (B C))) ((B (B C)) P))) ((A :31 (T (BK (BK K)))) ((A :32 (T (K (BK K)))) ((A :33 (T (K (K K)))) ((A :34 (T (K (K A)))) ((A :35 (K (noDefault "Monad.>>="))) ((A :36 (((C' (C' B)) _32) K)) ((A :37 ((B _13) _31)) ((A :38 (((S' (C' B)) _32) (((S' (C' B)) _32) (B' _34)))) ((A :39 P) ((A :40 (T K)) ((A :41 (T A)) ((A :42 (K _24)) ((A :43 ((B (B Y)) (((S' B) (B' ((B P) ((C _34) _239)))) (((S' (C' B)) ((B (B (C' B))) (B' _32))) (((S' (C' (C' B))) (B' _32)) (((C' B) (B' _34)) _240)))))) ((A :44 ((B (B Y)) (((S' B) (B' ((B P) ((C _34) _957)))) (((C' (C' B)) ((B (B (C' B))) (B' _32))) BK)))) ((A :45 ((B T) ((C _34) _957))) ((A :46 ((C _43) _121)) ((A :47 ((B _123) _32)) ((A :48 ((B C) ((B C') _32))) ((A :49 ((B _123) _48)) ((A :50 T) ((A :51 ((_127 ((B (B (_118 _50))) ((B ((C' C) _54)) (B P)))) (_131 _51))) ((A :52 (((((_11 _51) ((B (_118 _50)) P)) (_38 _53)) ((B (B (_118 _50))) (((C' B) ((B C) _54)) (BK _54)))) (_20 _52))) ((A :53 ((((_30 _52) ((B (B (_118 _50))) (((C' B) ((B C) _54)) (B _54)))) (_15 _52)) (_13 _52))) ((A :54 (T I)) ((A :55 ((B (_120 _278)) _54)) ((A :56 ((B (_118 _50)) (B (P _957)))) ((A :57 ((B (_118 _50)) (BK (P _957)))) ((A :58 ((_118 _50) ((S P) I))) ((A :59 ((B (_118 _50)) ((C (S' P)) I))) ((A :60 ((_113 ((C ((C S') _63)) I)) (_117 _60))) ((A :61 (R _69)) ((A :62 (T _68)) ((A :63 ((P _69) _68)) ((A :64 _69) ((A :65 ((C ((C S') _63)) I)) ((A :66 ((C S) _63)) ((A :67 (((_1170 (K ((P (_1179 "False")) (_1179 "True")))) (_1175 _67)) (_1176 _67))) ((A :68 K) ((A :69 A) ((A :70 ((_113 _993) _994)) ((A :71 ((((((((_256 _70) (_265 _71)) _995) _996) _997) _998) (_270 _71)) (_271 _71))) ((A :72 ((_113 _1003) (_117 _72))) ((A :73 ((((((((_256 _72) _1002) (((C' (C' (_114 _272))) _1002) _275)) (((C' (C' (_115 _272))) _1002) _277)) (((C' (C' (_114 _272))) _1002) _277)) (((C' (C' (_115 _272))) _1002) _277)) (_270 _73)) (_271 _73))) ((A :74 _1004) ((A :75 _1005) ((A :76 (((S' _62) (_996 #97)) ((C _996) #122))) ((A :77 (((S' _62) (_996 #65)) ((C _996) #90))) ((A :78 (((S' _61) _76) _77)) ((A :79 (((S' _62) (_996 #48)) ((C _996) #57))) ((A :80 (((S' _61) _78) _79)) ((A :81 (((S' _62) (_996 #32)) ((C _996) #126))) ((A :82 (((S' _61) ((C (_114 _70)) #32)) (((S' _61) ((C (_114 _70)) #9)) ((C (_114 _70)) #10)))) ((A :83 ((S ((S (((S' _62) (_996 #65)) ((C _996) #90))) (_69 (((noMatch "lib/Data/Char.hs") #3) #8)))) ((B _74) (((C' _133) (((C' _134) _75) (_75 #65))) (_75 #97))))) ((A :84 ((S ((S (((S' _62) (_996 #97)) ((C _996) #97))) (_69 (((noMatch "lib/Data/Char.hs") #3) #8)))) ((B _74) (((C' _133) (((C' _134) _75) (_75 #97))) (_75 #65))))) ((A :85 (((_1170 (K ((C ((S ((C ==) #39)) ((B (_120 (_1178 #39))) (((C' _120) ((B _1179) _86)) (_1178 #39))))) (_1179 "'\92&''")))) (_1175 _85)) ((B (_120 (_1178 #34))) (Y ((B (P (_1178 #34))) (((S' C) ((B ((S' S') ((C (_114 _70)) #34))) ((C' B) ((B _120) ((B _1179) _86))))) (B (_120 (_1179 "\92&\34&"))))))))) ((A :86 (((C' Y) (((S' B) ((B P) ((S ((S _81) ((B (_241 "'\92&")) (((C' _241) ((B (_11
\ No newline at end of file
+1197
+((A :0 ((B (B (B (B C)))) ((B (B (B C))) ((B (B C)) P)))) ((A :1 (T (BK (BK (BK K))))) ((A :2 (T (K (BK (BK K))))) ((A :3 (T (K (K (BK K))))) ((A :4 (T (K (K (K K))))) ((A :5 (T (K (K (K A))))) ((A :6 (K (noDefault "Alternative.empty"))) ((A :7 (K (noDefault "Alternative.<|>"))) ((A :8 ((S (((S' S') ((B _14) _1)) (((C' _132) ((B _12) _1)) _240))) _5)) ((A :9 ((S (((S' C') _3) _4)) (((C' _13) _1) _239))) ((A :10 (((S' P) _2) (((C' _13) _1) _958))) ((A :11 ((B (B (B (B C)))) ((B (B (B C))) ((B (B C)) P)))) ((A :12 (T (BK (BK (BK K))))) ((A :13 (T (K (BK (BK K))))) ((A :14 (T (K (K (BK K))))) ((A :15 (T (K (K (K K))))) ((A :16 (T (K (K (K A))))) ((A :17 (K (noDefault "Applicative.pure"))) ((A :18 (K (noDefault "Applicative.<*>"))) ((A :19 (((S' B) _14) (((C' _129) _12) _121))) ((A :20 (((S' B) _14) (((C' _132) _12) _122))) ((A :21 _1030) ((A :22 ((B _1073) _21)) ((A :23 (((S' _1073) _21) I)) ((A :24 _1000) ((A :25 (_24 "undefined")) ((A :26 I) ((A :27 (((C' B) _1029) ((C _120) _26))) ((A :28 (((C' _27) ((_128 _1043) _109)) ((_120 (_34 _1045)) _108))) ((A :29 ((B ((S _1073) (_34 _1045))) _24)) ((A :30 ((B (B (B C))) ((B (B C)) P))) ((A :31 (T (BK (BK K)))) ((A :32 (T (K (BK K)))) ((A :33 (T (K (K K)))) ((A :34 (T (K (K A)))) ((A :35 (K (noDefault "Monad.>>="))) ((A :36 (((C' (C' B)) _32) K)) ((A :37 ((B _13) _31)) ((A :38 (((S' (C' B)) _32) (((S' (C' B)) _32) (B' _34)))) ((A :39 P) ((A :40 (T K)) ((A :41 (T A)) ((A :42 (K _24)) ((A :43 ((B (B Y)) (((S' B) (B' ((B P) ((C _34) _239)))) (((S' (C' B)) ((B (B (C' B))) (B' _32))) (((S' (C' (C' B))) (B' _32)) (((C' B) (B' _34)) _240)))))) ((A :44 ((B (B Y)) (((S' B) (B' ((B P) ((C _34) _958)))) (((C' (C' B)) ((B (B (C' B))) (B' _32))) BK)))) ((A :45 ((B T) ((C _34) _958))) ((A :46 ((C _43) _121)) ((A :47 ((B _123) _32)) ((A :48 ((B C) ((B C') _32))) ((A :49 ((B _123) _48)) ((A :50 T) ((A :51 ((_127 ((B (B (_118 _50))) ((B ((C' C) _54)) (B P)))) (_131 _51))) ((A :52 (((((_11 _51) ((B (_118 _50)) P)) (_38 _53)) ((B (B (_118 _50))) (((C' B) ((B C) _54)) (BK _54)))) (_20 _52))) ((A :53 ((((_30 _52) ((B (B (_118 _50))) (((C' B) ((B C) _54)) (B _54)))) (_15 _52)) (_13 _52))) ((A :54 (T I)) ((A :55 ((B (_120 _278)) _54)) ((A :56 ((B (_118 _50)) (B (P _958)))) ((A :57 ((B (_118 _50)) (BK (P _958)))) ((A :58 ((_118 _50) ((S P) I))) ((A :59 ((B (_118 _50)) ((C (S' P)) I))) ((A :60 ((_113 ((C ((C S') _63)) I)) (_117 _60))) ((A :61 (R _69)) ((A :62 (T _68)) ((A :63 ((P _69) _68)) ((A :64 _69) ((A :65 ((C ((C S') _63)) I)) ((A :66 ((C S) _63)) ((A :67 (((_1171 (K ((P (_1180 "False")) (_1180 "True")))) (_1176 _67)) (_1177 _67))) ((A :68 K) ((A :69 A) ((A :70 ((_113 _994) _995)) ((A :71 ((((((((_256 _70) (_265 _71)) _996) _997) _998) _999) (_270 _71)) (_271 _71))) ((A :72 ((_113 _1004) (_117 _72))) ((A :73 ((((((((_256 _72) _1003) (((C' (C' (_114 _272))) _1003) _275)) (((C' (C' (_115 _272))) _1003) _277)) (((C' (C' (_114 _272))) _1003) _277)) (((C' (C' (_115 _272))) _1003) _277)) (_270 _73)) (_271 _73))) ((A :74 _1005) ((A :75 _1006) ((A :76 (((S' _62) (_997 #97)) ((C _997) #122))) ((A :77 (((S' _62) (_997 #65)) ((C _997) #90))) ((A :78 (((S' _61) _76) _77)) ((A :79 (((S' _62) (_997 #48)) ((C _997) #57))) ((A :80 (((S' _61) _78) _79)) ((A :81 (((S' _62) (_997 #32)) ((C _997) #126))) ((A :82 (((S' _61) ((C (_114 _70)) #32)) (((S' _61) ((C (_114 _70)) #9)) ((C (_114 _70)) #10)))) ((A :83 ((S ((S (((S' _62) (_997 #65)) ((C _997) #90))) (_69 (((noMatch "lib/Data/Char.hs") #3) #8)))) ((B _74) (((C' _133) (((C' _134) _75) (_75 #65))) (_75 #97))))) ((A :84 ((S ((S (((S' _62) (_997 #97)) ((C _997) #97))) (_69 (((noMatch "lib/Data/Char.hs") #3) #8)))) ((B _74) (((C' _133) (((C' _134) _75) (_75 #97))) (_75 #65))))) ((A :85 (((_1171 (K ((C ((S ((C ==) #39)) ((B (_120 (_1179 #39))) (((C' _120) ((B _1180) _86)) (_1179 #39))))) (_1180 "'\92&''")))) (_1176 _85)) ((B (_120 (_1179 #34))) (Y ((B (P (_1179 #34))) (((S' C) ((B ((S' S') ((C (_114 _70)) #34))) ((C' B) ((B _120) ((B _1180) _86))))) (B (_120 (_1180 "\92&\34&"))))))))) ((A :86 (((C' Y) (((S' B) ((B P) ((S ((S _81) ((B (_241 "'\92&")) (((C' _241) ((B (_1
\ No newline at end of file
--- a/src/MicroHs/Expr.hs
+++ b/src/MicroHs/Expr.hs
@@ -464,7 +464,10 @@
ppExpr :: Expr -> Doc
ppExpr ae =
case ae of
- EVar v -> ppIdent v
+ EVar i | isOperChar cop -> parens (text op)
+ | otherwise -> text op
+ where op = unIdent (unQualIdent i)
+ cop = head op
EApp _ _ -> ppApp [] ae
EOper e ies -> ppExpr (foldl (\ e1 (i, e2) -> EApp (EApp (EVar i) e1) e2) e ies)
ELam qs -> parens $ text "\\" <> ppEqns empty (text "->") qs
@@ -483,14 +486,16 @@
EUVar i -> text ("a" ++ show i)ECon c -> ppCon c
EForall iks e -> ppForall iks <+> ppEType e
- where
- ppApp as (EApp f a) = ppApp (a:as) f
- ppApp as (EVar i) | op == "->", [a, b] <- as = parens $ ppExpr a <+> text "->" <+> ppExpr b
- | op == "=>", [a, b] <- as = parens $ ppExpr a <+> text "=>" <+> ppExpr b
- | head op == ',' = ppExpr (ETuple as)
- | op == "[]", length as == 1 = ppExpr (EListish (LList as))
- where op = unQualString (unIdent i)
- ppApp as f = parens $ hsep (map ppExpr (f:as))
+-- where
+ppApp :: [Expr] -> Expr -> Doc
+ppApp as (EApp f a) = ppApp (a:as) f
+ppApp as (EVar i) | isOperChar cop, [a, b] <- as = parens $ ppExpr a <+> text op <+> ppExpr b
+ | isOperChar cop, [a] <- as = parens $ ppExpr a <+> text op
+ | cop == ',' = ppExpr (ETuple as)
+ | op == "[]", length as == 1 = ppExpr (EListish (LList as))
+ where op = unIdent (unQualIdent i)
+ cop = head op
+ppApp as f = parens $ hsep (map ppExpr (f:as))
ppForall :: [IdKind] -> Doc
ppForall [] = empty
--
⑨