@@ -30,6 +30,8 @@ import Data.Word (Word)
3030
3131import Debug.Trace
3232
33+import Text.PrettyPrint.Annotated.Leijen
34+
3335data IOption = IOption { opt_logLevel :: Int,
3436 opt_typecase :: Bool,
3537 opt_typeintype :: Bool,
@@ -895,7 +897,7 @@ expandNS syn n = case syn_namespace syn of
895897instance Show PTerm where
896898 show tm = showImp Nothing False False tm
897899
898−instance Pretty PTerm where
900+instance Pretty PTerm OutputAnnotation where
899901 pretty = prettyImp False
900902
901903instance Show PDecl where
@@ -965,15 +967,17 @@ getConsts (_ : xs) = getConsts xs
965967getAll :: [PArg] -> [PTerm]
966968getAll = map getTm
967969
970+
968971-- | Pretty-print a high-level Idris term
969972prettyImp :: Bool -- ^^ whether to show implicits
970973 -> PTerm -- ^^ the term to pretty-print
971− -> Doc
974+ -> Doc OutputAnnotation
972975prettyImp impl = prettySe 10
973976 where
977+ prettySe :: Int -> PTerm -> Doc OutputAnnotation
974978 prettySe p (PQuote r) =
975979 if size r > breakingSize then
976− text "![" $$ pretty r <> text "]"
980+ text "![" <> line <> pretty r <> text "]"
977981 else
978982 text "![" <> pretty r <> text "]"
979983 prettySe p (PPatvar fc n) = pretty n
@@ -990,37 +994,37 @@ prettyImp impl = prettySe 10
990994 prettySe p (PLam n ty sc) =
991995 bracket p 2 $
992996 if size sc > breakingSize then
993− text "λ" <> pretty n <+> text "=>" $+$ pretty sc
997+ text "λ" <> pretty n <+> text "=>" <> line <> pretty sc
994998 else
995999 text "λ" <> pretty n <+> text "=>" <+> pretty sc
9961000 prettySe p (PLet n ty v sc) =
9971001 bracket p 2 $
9981002 if size sc > breakingSize then
999− text "let" <+> pretty n <+> text "=" <+> prettySe 10 v <+> text "in" $+$
1003+ text "let" <+> pretty n <+> text "=" <+> prettySe 10 v <+> text "in" <>
10001004 nest nestingSize (prettySe 10 sc)
10011005 else
10021006 text "let" <+> pretty n <+> text "=" <+> prettySe 10 v <+> text "in" <+>
10031007 prettySe 10 sc
10041008 prettySe p (PPi (Exp l s _ _) n ty sc)
10051009 | n `elem` allNamesIn sc || impl =
1006− let open = if l then text "|" <> lparen else lparen in
1010+ let open = (if l then text "|" else empty) <> lparen in
10071011 bracket p 2 $
10081012 if size sc > breakingSize then
1009− open <> pretty n <+> colon <+> prettySe 10 ty <> rparen <+>
1010− st <+> text "->" $+$ prettySe 10 sc
1013+ enclose open rparen (pretty n <+> colon <+> prettySe 10 ty) <+>
1014+ st <> text "->" <> line <> prettySe 10 sc
10111015 else
1012− open <> pretty n <+> colon <+> prettySe 10 ty <> rparen <+>
1013− st <+> text "->" <+> prettySe 10 sc
1016+ enclose open rparen (pretty n <+> colon <+> prettySe 10 ty) <+>
1017+ st <> text "->" <+> prettySe 10 sc
10141018 | otherwise =
10151019 bracket p 2 $
10161020 if size sc > breakingSize then
1017− prettySe 0 ty <+> st <+> text "->" $+$ prettySe 10 sc
1021+ prettySe 0 ty <+> st <+> text "->" <> line <> prettySe 10 sc
10181022 else
10191023 prettySe 0 ty <+> st <+> text "->" <+> prettySe 10 sc
10201024 where
10211025 st =
10221026 case s of
1023− Static -> text "[static]"
1027+ Static -> text "[static]" <> space
10241028 _ -> empty
10251029 prettySe p (PPi (Imp l s _ _) n ty sc)
10261030 | impl =
@@ -1028,27 +1032,27 @@ prettyImp impl = prettySe 10
10281032 bracket p 2 $
10291033 if size sc > breakingSize then
10301034 open <> pretty n <+> colon <+> prettySe 10 ty <> rbrace <+>
1031− st <+> text "->" <+> prettySe 10 sc
1035+ st <> text "->" <+> prettySe 10 sc
10321036 else
10331037 open <> pretty n <+> colon <+> prettySe 10 ty <> rbrace <+>
1034− st <+> text "->" <+> prettySe 10 sc
1038+ st <> text "->" <+> prettySe 10 sc
10351039 | otherwise = prettySe 10 sc
10361040 where
10371041 st =
10381042 case s of
1039− Static -> text $ "[static]"
1043+ Static -> text "[static]" <> space
10401044 _ -> empty
10411045 prettySe p (PPi (Constraint _ _ _) n ty sc) =
10421046 bracket p 2 $
10431047 if size sc > breakingSize then
10441048 prettySe 10 ty <+> text "=>" <+> prettySe 10 sc
10451049 else
1046− prettySe 10 ty <+> text "=>" $+$ prettySe 10 sc
1050+ prettySe 10 ty <+> text "=>" <> line <> prettySe 10 sc
10471051 prettySe p (PPi (TacImp _ _ s _) n ty sc) =
10481052 bracket p 2 $
10491053 if size sc > breakingSize then
10501054 lbrace <> text "tacimp" <+> pretty n <+> colon <+> prettySe 10 ty <>
1051− rbrace <+> text "->" $+$ prettySe 10 sc
1055+ rbrace <+> text "->" <> line <> prettySe 10 sc
10521056 else
10531057 lbrace <> text "tacimp" <+> pretty n <+> colon <+> prettySe 10 ty <>
10541058 rbrace <+> text "->" <+> prettySe 10 sc
@@ -1062,37 +1066,22 @@ prettyImp impl = prettySe 10
10621066 let [l, r] = getExps args in
10631067 bracket p 1 $
10641068 if size r > breakingSize then
1065− prettySe 1 l <+> pretty op $+$ prettySe 0 r
1069+ prettySe 1 l <+> pretty op <> line <> prettySe 0 r
10661070 else
10671071 prettySe 1 l <+> pretty op <+> prettySe 0 r
10681072 prettySe p (PApp _ f as) =
10691073 let args = getExps as in
10701074 bracket p 1 $
10711075 prettySe 1 f <+>
1072− if impl then
1073− foldl' fS empty as
1074− -- foldr (<+>) empty $ map prettyArgS as
1075− else
1076− foldl' fSe empty args
1077− -- foldr (<+>) empty $ map prettyArgSe args
1078− where
1079− fS l r =
1080− if size r > breakingSize then
1081− l $+$ nest nestingSize (prettyArgS r)
1082− else
1083− l <+> prettyArgS r
1084−
1085− fSe l r =
1086− if size r > breakingSize then
1087− l $+$ nest nestingSize (prettyArgSe r)
1088− else
1089− l <+> prettyArgSe r
1076+ align (hsep (if impl
1077+ then map prettyArgS as
1078+ else map prettyArgSe args))
10901079 prettySe p (PCase _ scr opts) =
1091− text "case" <+> prettySe 10 scr <+> text "of" $+$ nest nestingSize prettyBody
1080+ text "case" <+> prettySe 10 scr <+> text "of" <> prettyBody
10921081 where
1093− prettyBody = foldr ($$) empty $ intersperse (text "|") $ map sc opts
1082+ prettyBody = foldr (<>) empty $ intersperse (text "|") $ map sc opts
10941083
1095− sc (l, r) = prettySe 10 l <+> text "=>" <+> prettySe 10 r
1084+ sc (l, r) = nest nestingSize $ prettySe 10 l <+> text "=>" <+> prettySe 10 r
10961085 prettySe p (PHidden tm) = text "." <> prettySe 0 tm
10971086 prettySe p (PRefl _ _) = text "refl"
10981087 prettySe p (PResolveTC _) = text "resolvetc"
@@ -1101,27 +1090,27 @@ prettyImp impl = prettySe 10
11011090 prettySe p (PEq _ l r) =
11021091 bracket p 2 $
11031092 if size r > breakingSize then
1104− prettySe 10 l <+> text "=" $$ nest nestingSize (prettySe 10 r)
1093+ prettySe 10 l <+> text "=" <> nest nestingSize (prettySe 10 r)
11051094 else
11061095 prettySe 10 l <+> text "=" <+> prettySe 10 r
11071096 prettySe p (PRewrite _ l r _) =
11081097 bracket p 2 $
11091098 if size r > breakingSize then
1110− text "rewrite" <+> prettySe 10 l <+> text "in" $$ nest nestingSize (prettySe 10 r)
1099+ text "rewrite" <+> prettySe 10 l <+> text "in" <> nest nestingSize (prettySe 10 r)
11111100 else
11121101 text "rewrite" <+> prettySe 10 l <+> text "in" <+> prettySe 10 r
11131102 prettySe p (PTyped l r) =
11141103 lparen <> prettySe 10 l <+> colon <+> prettySe 10 r <> rparen
11151104 prettySe p (PPair _ l r) =
11161105 if size r > breakingSize then
1117− lparen <> prettySe 10 l <> text "," $+$
1118− prettySe 10 r <> rparen
1106+ lparen <> prettySe 10 l <> text "," <>
1107+ line <> prettySe 10 r <> rparen
11191108 else
11201109 lparen <> prettySe 10 l <> text "," <+> prettySe 10 r <> rparen
11211110 prettySe p (PDPair _ l t r) =
11221111 if size r > breakingSize then
1123− lparen <> prettySe 10 l <+> text "**" $+$
1124− prettySe 10 r <> rparen
1112+ lparen <> prettySe 10 l <+> text "**" <>
1113+ line <> prettySe 10 r <> rparen
11251114 else
11261115 lparen <> prettySe 10 l <+> text "**" <+> prettySe 10 r <> rparen
11271116 prettySe p (PAlternative a as) =
@@ -1133,9 +1122,9 @@ prettyImp impl = prettySe 10
11331122 prettySe p (PConstant c) = pretty c
11341123 -- XXX: add pretty for tactics
11351124 prettySe p (PProof ts) =
1136− text "proof" <+> lbrace $+$ nest nestingSize (text . show $ ts) $+$ rbrace
1125+ text "proof" <+> lbrace <> nest nestingSize (text . show $ ts) <> rbrace
11371126 prettySe p (PTactics ts) =
1138− text "tactics" <+> lbrace $+$ nest nestingSize (text . show $ ts) $+$ rbrace
1127+ text "tactics" <+> lbrace <> nest nestingSize (text . show $ ts) <> rbrace
11391128 prettySe p (PMetavar n) = text "?" <> pretty n
11401129 prettySe p (PReturn f) = text "return"
11411130 prettySe p PImpossible = text "impossible"