@@ -95,6 +95,24 @@ defaultOpts = IOption { opt_logLevel = 0
9595 , opt_autoSolve = True
9696 }
9797
98+data PPOption = PPOption {
99+ ppopt_impl :: Bool -- ^^ whether to show implicits
100+} deriving (Show)
101+
102+-- | Pretty printing options with default verbosity.
103+defaultPPOption :: PPOption
104+defaultPPOption = PPOption { ppopt_impl = False }
105+
106+-- | Pretty printing options with the most verbosity.
107+verbosePPOption :: PPOption
108+verbosePPOption = PPOption { ppopt_impl = True }
109+
110+-- | Get pretty printing options from the big options record.
111+ppOption :: IOption -> PPOption
112+ppOption opt = PPOption {
113+ ppopt_impl = opt_showimp opt
114+}
115+
98116data LanguageExt = TypeProviders | ErrorReflection deriving (Show, Eq, Read, Ord)
99117
100118-- | The output mode in use
@@ -1089,19 +1107,19 @@ piBindp p ((n, ty):ns) t = PPi p n ty (piBindp p ns t)
10891107-- could interfere with interactive editing, which calls "show".
10901108
10911109instance Show PTerm where
1092− showsPrec _ tm = (displayS . renderPretty 1.0 10000000 . prettyImp False) tm
1110+ showsPrec _ tm = (displayS . renderPretty 1.0 10000000 . prettyImp defaultPPOption) tm
10931111
10941112instance Show PDecl where
1095− showsPrec _ d = (displayS . renderPretty 1.0 10000000 . showDeclImp False) d
1113+ showsPrec _ d = (displayS . renderPretty 1.0 10000000 . showDeclImp defaultPPOption) d
10961114
10971115instance Show PClause where
1098− showsPrec _ c = (displayS . renderPretty 1.0 10000000 . showCImp True) c
1116+ showsPrec _ c = (displayS . renderPretty 1.0 10000000 . showCImp verbosePPOption) c
10991117
11001118instance Show PData where
1101− showsPrec _ d = (displayS . renderPretty 1.0 10000000 . showDImp False) d
1119+ showsPrec _ d = (displayS . renderPretty 1.0 10000000 . showDImp defaultPPOption) d
11021120
11031121instance Pretty PTerm OutputAnnotation where
1104− pretty = prettyImp False
1122+ pretty = prettyImp defaultPPOption
11051123
11061124-- | Colourise annotations according to an Idris state. It ignores the names
11071125-- in the annotation, as there's no good way to show extended information on a
@@ -1129,23 +1147,23 @@ consoleDecorate ist (AnnTextFmt fmt) = Idris.Colours.colourise (colour fmt)
11291147 colour ItalicText = IdrisColour Nothing True False False True
11301148
11311149-- | Pretty-print a high-level closed Idris term with no information about precedence/associativity
1132−prettyImp :: Bool -- ^^ whether to show implicits
1150+prettyImp :: PPOption -- ^^ pretty printing options
11331151 -> PTerm -- ^^ the term to pretty-print
11341152 -> Doc OutputAnnotation
11351153prettyImp impl = pprintPTerm impl [] [] []
11361154
11371155-- | Do the right thing for rendering a term in an IState
11381156prettyIst :: IState -> PTerm -> Doc OutputAnnotation
1139−prettyIst ist = pprintPTerm (opt_showimp (idris_options ist)) [] [] (idris_infixes ist)
1157+prettyIst ist = pprintPTerm (ppOption (idris_options ist)) [] [] (idris_infixes ist)
11401158
11411159-- | Pretty-print a high-level Idris term in some bindings context with infix info
1142−pprintPTerm :: Bool -- ^^ whether to show implicits
1160+pprintPTerm :: PPOption -- ^^ pretty printing options
11431161 -> [(Name, Bool)] -- ^^ the currently-bound names and whether they are implicit
11441162 -> [Name] -- ^^ names to always show in pi, even if not used
11451163 -> [FixDecl] -- ^^ Fixity declarations
11461164 -> PTerm -- ^^ the term to pretty-print
11471165 -> Doc OutputAnnotation
1148−pprintPTerm impl bnd docArgs infixes = prettySe 10 bnd
1166+pprintPTerm ppo bnd docArgs infixes = prettySe 10 bnd
11491167 where
11501168 prettySe :: Int -> [(Name, Bool)] -> PTerm -> Doc OutputAnnotation
11511169 prettySe p bnd (PQuote r) =
@@ -1154,7 +1172,7 @@ pprintPTerm impl bnd docArgs infixes = prettySe 10 bnd
11541172 prettySe p bnd e
11551173 | Just str <- slist p bnd e = str
11561174 | Just n <- snat p e = annotate AnnConstData (text (show n))
1157− prettySe p bnd (PRef fc n) = prettyName impl bnd n
1175+ prettySe p bnd (PRef fc n) = prettyName (ppopt_impl ppo) bnd n
11581176 prettySe p bnd (PLam n ty sc) =
11591177 bracket p 2 . group . align . hang 2 $
11601178 text "\\" <> bindingOf n False <+> text "=>" <$>
@@ -1165,7 +1183,7 @@ pprintPTerm impl bnd docArgs infixes = prettySe 10 bnd
11651183 prettySe 10 bnd v <+> kwd "in" </>
11661184 prettySe 10 ((n, False):bnd) sc
11671185 prettySe p bnd (PPi (Exp l s _) n ty sc)
1168− | n `elem` allNamesIn sc || impl || n `elem` docArgs =
1186+ | n `elem` allNamesIn sc || ppopt_impl ppo || n `elem` docArgs =
11691187 bracket p 2 . group $
11701188 enclose lparen rparen (group . align $ bindingOf n False <+> colon <+> prettySe 10 bnd ty) <+>
11711189 st <> text "->" <$> prettySe 10 ((n, False):bnd) sc
@@ -1178,7 +1196,7 @@ pprintPTerm impl bnd docArgs infixes = prettySe 10 bnd
11781196 Static -> text "[static]" <> space
11791197 _ -> empty
11801198 prettySe p bnd (PPi (Imp l s _) n ty sc)
1181− | impl =
1199+ | ppopt_impl ppo =
11821200 bracket p 2 $
11831201 lbrace <> bindingOf n True <+> colon <+> prettySe 10 bnd ty <> rbrace <+>
11841202 st <> text "->" </> prettySe 10 ((n, True):bnd) sc
@@ -1197,16 +1215,16 @@ pprintPTerm impl bnd docArgs infixes = prettySe 10 bnd
11971215 rbrace <+> text "->" </> prettySe 10 ((n, True):bnd) sc
11981216 prettySe p bnd (PApp _ (PRef _ f) args) -- normal names, no explicit args
11991217 | UN nm <- basename f
1200− , not impl && null (getExps args) = if isAlpha (thead nm)
1201− then prettyName impl bnd f
1202− else enclose lparen rparen $
1203− prettyName impl bnd f
1218+ , not (ppopt_impl ppo) && null (getExps args) =
1219+ if isAlpha (thead nm)
1220+ then prettyName (ppopt_impl ppo) bnd f
1221+ else enclose lparen rparen $ prettyName (ppopt_impl ppo) bnd f
12041222 prettySe p bnd (PAppBind _ (PRef _ f) [])
1205− | not impl = text "!" <> prettyName impl bnd f
1223+ | not (ppopt_impl ppo) = text "!" <> prettyName (ppopt_impl ppo) bnd f
12061224 prettySe p bnd (PApp _ (PRef _ op) args)
12071225 | UN nm <- basename op
12081226 , not (tnull nm) &&
1209− (not impl) && (not $ isAlpha (thead nm)) =
1227+ (not (ppopt_impl ppo)) && (not $ isAlpha (thead nm)) =
12101228 case getExps args of
12111229 [] -> enclose lparen rparen opName
12121230 [x] -> group (enclose lparen rparen opName <$> group (prettySe 0 bnd x))
@@ -1215,7 +1233,7 @@ pprintPTerm impl bnd docArgs infixes = prettySe 10 bnd
12151233 (l:r:rest) -> bracket p 1 $
12161234 enclose lparen rparen (inFix l r) <+>
12171235 align (group (vsep (map (prettyArgSe bnd) rest)))
1218− where opName = prettyName impl bnd op
1236+ where opName = prettyName (ppopt_impl ppo) bnd op
12191237 f = getFixity (opStr op)
12201238 left l = case f of
12211239 Nothing -> prettySe (-1) bnd l
@@ -1235,7 +1253,7 @@ pprintPTerm impl bnd docArgs infixes = prettySe 10 bnd
12351253 fp = prettySe 1 bnd f
12361254 in
12371255 bracket p 1 . group $
1238− if impl
1256+ if ppopt_impl ppo
12391257 then if null as
12401258 then fp
12411259 else fp <+> align (vsep (map (prettyArgS bnd) as))
@@ -1340,9 +1358,9 @@ pprintPTerm impl bnd docArgs infixes = prettySe 10 bnd
13401358 basename n = n
13411359
13421360 slist' p bnd (PApp _ (PRef _ nil) _)
1343− | not impl && nsroot nil == sUN "Nil" = Just []
1361+ | not (ppopt_impl ppo) && nsroot nil == sUN "Nil" = Just []
13441362 slist' p bnd (PRef _ nil)
1345− | not impl && nsroot nil == sUN "Nil" = Just []
1363+ | not (ppopt_impl ppo) && nsroot nil == sUN "Nil" = Just []
13461364 slist' p bnd (PApp _ (PRef _ cons) args)
13471365 | nsroot cons == sUN "::",
13481366 (PExp {getTm=tl}):(PExp {getTm=hd}):imps <- reverse args,
@@ -1415,43 +1433,43 @@ prettyName showNS bnd n | Just imp <- lookup n bnd = annotate (AnnBoundName n im
14151433 strName other = show other
14161434
14171435
1418−showCImp :: Bool -> PClause -> Doc OutputAnnotation
1419−showCImp impl (PClause _ n l ws r w)
1420− = prettyImp impl l <+> showWs ws <+> text "=" <+> prettyImp impl r
1436+showCImp :: PPOption -> PClause -> Doc OutputAnnotation
1437+showCImp ppo (PClause _ n l ws r w)
1438+ = prettyImp ppo l <+> showWs ws <+> text "=" <+> prettyImp ppo r
14211439 <+> text "where" <+> text (show w)
14221440 where
14231441 showWs [] = empty
1424− showWs (x : xs) = text "|" <+> prettyImp impl x <+> showWs xs
1425−showCImp impl (PWith _ n l ws r w)
1426− = prettyImp impl l <+> showWs ws <+> text "with" <+> prettyImp impl r
1442+ showWs (x : xs) = text "|" <+> prettyImp ppo x <+> showWs xs
1443+showCImp ppo (PWith _ n l ws r w)
1444+ = prettyImp ppo l <+> showWs ws <+> text "with" <+> prettyImp ppo r
14271445 <+> braces (text (show w))
14281446 where
14291447 showWs [] = empty
1430− showWs (x : xs) = text "|" <+> prettyImp impl x <+> showWs xs
1448+ showWs (x : xs) = text "|" <+> prettyImp ppo x <+> showWs xs
14311449
14321450
1433−showDImp :: Bool -> PData -> Doc OutputAnnotation
1434−showDImp impl (PDatadecl n ty cons)
1435− = text "data" <+> text (show n) <+> colon <+> prettyImp impl ty <+> text "where" <$>
1436− (indent 2 $ vsep (map (\ (_, _, n, t, _, _) -> pipe <+> prettyName False [] n <+> colon <+> prettyImp impl t) cons))
1451+showDImp :: PPOption -> PData -> Doc OutputAnnotation
1452+showDImp ppo (PDatadecl n ty cons)
1453+ = text "data" <+> text (show n) <+> colon <+> prettyImp ppo ty <+> text "where" <$>
1454+ (indent 2 $ vsep (map (\ (_, _, n, t, _, _) -> pipe <+> prettyName False [] n <+> colon <+> prettyImp ppo t) cons))
14371455
1438−showDecls :: Bool -> [PDecl] -> Doc OutputAnnotation
1439−showDecls i ds = vsep (map (showDeclImp i) ds)
1456+showDecls :: PPOption -> [PDecl] -> Doc OutputAnnotation
1457+showDecls o ds = vsep (map (showDeclImp o) ds)
14401458
14411459showDeclImp _ (PFix _ f ops) = text (show f) <+> cat (punctuate (text ",") (map text ops))
1442−showDeclImp i (PTy _ _ _ _ _ n t) = text "tydecl" <+> text (showCG n) <+> colon <+> prettyImp i t
1443−showDeclImp i (PClauses _ _ n cs) = text "pat" <+> text (showCG n) <+> text "\t" <+>
1444− indent 2 (vsep (map (showCImp i) cs))
1445−showDeclImp _ (PData _ _ _ _ _ d) = showDImp True d
1446−showDeclImp i (PParams _ ns ps) = text "params" <+> braces (text (show ns) <> line <> showDecls i ps <> line)
1447−showDeclImp i (PNamespace n ps) = text "namespace" <+> text n <> braces (line <> showDecls i ps <> line)
1460+showDeclImp o (PTy _ _ _ _ _ n t) = text "tydecl" <+> text (showCG n) <+> colon <+> prettyImp o t
1461+showDeclImp o (PClauses _ _ n cs) = text "pat" <+> text (showCG n) <+> text "\t" <+>
1462+ indent 2 (vsep (map (showCImp o) cs))
1463+showDeclImp o (PData _ _ _ _ _ d) = showDImp o { ppopt_impl = True } d
1464+showDeclImp o (PParams _ ns ps) = text "params" <+> braces (text (show ns) <> line <> showDecls o ps <> line)
1465+showDeclImp o (PNamespace n ps) = text "namespace" <+> text n <> braces (line <> showDecls o ps <> line)
14481466showDeclImp _ (PSyntax _ syn) = text "syntax" <+> text (show syn)
1449−showDeclImp i (PClass _ _ _ cs n ps _ ds)
1450− = text "class" <+> text (show cs) <+> text (show n) <+> text (show ps) <> line <> showDecls i ds
1451−showDeclImp i (PInstance _ _ cs n _ t _ ds)
1452− = text "instance" <+> text (show cs) <+> text (show n) <+> prettyImp i t <> line <> showDecls i ds
1467+showDeclImp o (PClass _ _ _ cs n ps _ ds)
1468+ = text "class" <+> text (show cs) <+> text (show n) <+> text (show ps) <> line <> showDecls o ds
1469+showDeclImp o (PInstance _ _ cs n _ t _ ds)
1470+ = text "instance" <+> text (show cs) <+> text (show n) <+> prettyImp o t <> line <> showDecls o ds
14531471showDeclImp _ _ = text "..."
1454−-- showDeclImp (PImport i) = "import " ++ i
1472+-- showDeclImp (PImport o) = "import " ++ o
14551473
14561474instance Show (Doc OutputAnnotation) where
14571475 show = flip (displayS . renderCompact) ""
@@ -1478,14 +1496,14 @@ getAll = map getTm
14781496-- | Show Idris name
14791497showName :: Maybe IState -- ^^ the Idris state, for information about names and colours
14801498 -> [(Name, Bool)] -- ^^ the bound variables and whether they're implicit
1481− -> Bool -- ^^ whether to show implicits
1499+ -> PPOption -- ^^ pretty printing options
14821500 -> Bool -- ^^ whether to colourise
14831501 -> Name -- ^^ the term to show
14841502 -> String
1485−showName ist bnd impl colour n = case ist of
1503+showName ist bnd ppo colour n = case ist of
14861504 Just i -> if colour then colourise n (idris_colourTheme i) else showbasic n
14871505 Nothing -> showbasic n
1488− where name = if impl then show n else showbasic n
1506+ where name = if ppopt_impl ppo then show n else showbasic n
14891507 showbasic n@(UN _) = showCG n
14901508 showbasic (MN _ s) = str s
14911509 showbasic (NS n s) = showSep "." (map str (reverse s)) ++ "." ++ showbasic n
@@ -1509,11 +1527,11 @@ showTm :: IState -- ^^ the Idris state, for information about identifiers and co
15091527 -> String
15101528showTm ist = displayDecorated (consoleDecorate ist) .
15111529 renderPretty 0.8 100000 .
1512− prettyImp (opt_showimp (idris_options ist))
1530+ prettyImp (ppOption (idris_options ist))
15131531
15141532-- | Show a term with implicits, no colours
15151533showTmImpls :: PTerm -> String
1516−showTmImpls = flip (displayS . renderCompact . prettyImp True) ""
1534+showTmImpls = flip (displayS . renderCompact . prettyImp verbosePPOption) ""
15171535
15181536
15191537instance Sized PTerm where