@@ -95,6 +95,28 @@ 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+
116+-- | Get pretty printing options from an idris state record.
117+ppOptionIst :: IState -> PPOption
118+ppOptionIst = ppOption . idris_options
119+
98120data LanguageExt = TypeProviders | ErrorReflection deriving (Show, Eq, Read, Ord)
99121
100122-- | The output mode in use
@@ -1089,19 +1111,19 @@ piBindp p ((n, ty):ns) t = PPi p n ty (piBindp p ns t)
10891111-- could interfere with interactive editing, which calls "show".
10901112
10911113instance Show PTerm where
1092− showsPrec _ tm = (displayS . renderPretty 1.0 10000000 . prettyImp False) tm
1114+ showsPrec _ tm = (displayS . renderPretty 1.0 10000000 . prettyImp defaultPPOption) tm
10931115
10941116instance Show PDecl where
1095− showsPrec _ d = (displayS . renderPretty 1.0 10000000 . showDeclImp False) d
1117+ showsPrec _ d = (displayS . renderPretty 1.0 10000000 . showDeclImp defaultPPOption) d
10961118
10971119instance Show PClause where
1098− showsPrec _ c = (displayS . renderPretty 1.0 10000000 . showCImp True) c
1120+ showsPrec _ c = (displayS . renderPretty 1.0 10000000 . showCImp verbosePPOption) c
10991121
11001122instance Show PData where
1101− showsPrec _ d = (displayS . renderPretty 1.0 10000000 . showDImp False) d
1123+ showsPrec _ d = (displayS . renderPretty 1.0 10000000 . showDImp defaultPPOption) d
11021124
11031125instance Pretty PTerm OutputAnnotation where
1104− pretty = prettyImp False
1126+ pretty = prettyImp defaultPPOption
11051127
11061128-- | Colourise annotations according to an Idris state. It ignores the names
11071129-- in the annotation, as there's no good way to show extended information on a
@@ -1129,23 +1151,23 @@ consoleDecorate ist (AnnTextFmt fmt) = Idris.Colours.colourise (colour fmt)
11291151 colour ItalicText = IdrisColour Nothing True False False True
11301152
11311153-- | Pretty-print a high-level closed Idris term with no information about precedence/associativity
1132−prettyImp :: Bool -- ^^ whether to show implicits
1154+prettyImp :: PPOption -- ^^ pretty printing options
11331155 -> PTerm -- ^^ the term to pretty-print
11341156 -> Doc OutputAnnotation
11351157prettyImp impl = pprintPTerm impl [] [] []
11361158
11371159-- | Do the right thing for rendering a term in an IState
11381160prettyIst :: IState -> PTerm -> Doc OutputAnnotation
1139−prettyIst ist = pprintPTerm (opt_showimp (idris_options ist)) [] [] (idris_infixes ist)
1161+prettyIst ist = pprintPTerm (ppOptionIst ist) [] [] (idris_infixes ist)
11401162
11411163-- | Pretty-print a high-level Idris term in some bindings context with infix info
1142−pprintPTerm :: Bool -- ^^ whether to show implicits
1164+pprintPTerm :: PPOption -- ^^ pretty printing options
11431165 -> [(Name, Bool)] -- ^^ the currently-bound names and whether they are implicit
11441166 -> [Name] -- ^^ names to always show in pi, even if not used
11451167 -> [FixDecl] -- ^^ Fixity declarations
11461168 -> PTerm -- ^^ the term to pretty-print
11471169 -> Doc OutputAnnotation
1148−pprintPTerm impl bnd docArgs infixes = prettySe 10 bnd
1170+pprintPTerm ppo bnd docArgs infixes = prettySe 10 bnd
11491171 where
11501172 prettySe :: Int -> [(Name, Bool)] -> PTerm -> Doc OutputAnnotation
11511173 prettySe p bnd (PQuote r) =
@@ -1154,7 +1176,7 @@ pprintPTerm impl bnd docArgs infixes = prettySe 10 bnd
11541176 prettySe p bnd e
11551177 | Just str <- slist p bnd e = str
11561178 | Just n <- snat p e = annotate AnnConstData (text (show n))
1157− prettySe p bnd (PRef fc n) = prettyName impl bnd n
1179+ prettySe p bnd (PRef fc n) = prettyName (ppopt_impl ppo) bnd n
11581180 prettySe p bnd (PLam n ty sc) =
11591181 bracket p 2 . group . align . hang 2 $
11601182 text "\\" <> bindingOf n False <+> text "=>" <$>
@@ -1165,7 +1187,7 @@ pprintPTerm impl bnd docArgs infixes = prettySe 10 bnd
11651187 prettySe 10 bnd v <+> kwd "in" </>
11661188 prettySe 10 ((n, False):bnd) sc
11671189 prettySe p bnd (PPi (Exp l s _) n ty sc)
1168− | n `elem` allNamesIn sc || impl || n `elem` docArgs =
1190+ | n `elem` allNamesIn sc || ppopt_impl ppo || n `elem` docArgs =
11691191 bracket p 2 . group $
11701192 enclose lparen rparen (group . align $ bindingOf n False <+> colon <+> prettySe 10 bnd ty) <+>
11711193 st <> text "->" <$> prettySe 10 ((n, False):bnd) sc
@@ -1178,7 +1200,7 @@ pprintPTerm impl bnd docArgs infixes = prettySe 10 bnd
11781200 Static -> text "[static]" <> space
11791201 _ -> empty
11801202 prettySe p bnd (PPi (Imp l s _) n ty sc)
1181− | impl =
1203+ | ppopt_impl ppo =
11821204 bracket p 2 $
11831205 lbrace <> bindingOf n True <+> colon <+> prettySe 10 bnd ty <> rbrace <+>
11841206 st <> text "->" </> prettySe 10 ((n, True):bnd) sc
@@ -1197,16 +1219,16 @@ pprintPTerm impl bnd docArgs infixes = prettySe 10 bnd
11971219 rbrace <+> text "->" </> prettySe 10 ((n, True):bnd) sc
11981220 prettySe p bnd (PApp _ (PRef _ f) args) -- normal names, no explicit args
11991221 | 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
1222+ , not (ppopt_impl ppo) && null (getExps args) =
1223+ if isAlpha (thead nm)
1224+ then prettyName (ppopt_impl ppo) bnd f
1225+ else enclose lparen rparen $ prettyName (ppopt_impl ppo) bnd f
12041226 prettySe p bnd (PAppBind _ (PRef _ f) [])
1205− | not impl = text "!" <> prettyName impl bnd f
1227+ | not (ppopt_impl ppo) = text "!" <> prettyName (ppopt_impl ppo) bnd f
12061228 prettySe p bnd (PApp _ (PRef _ op) args)
12071229 | UN nm <- basename op
12081230 , not (tnull nm) &&
1209− (not impl) && (not $ isAlpha (thead nm)) =
1231+ (not (ppopt_impl ppo)) && (not $ isAlpha (thead nm)) =
12101232 case getExps args of
12111233 [] -> enclose lparen rparen opName
12121234 [x] -> group (enclose lparen rparen opName <$> group (prettySe 0 bnd x))
@@ -1215,7 +1237,7 @@ pprintPTerm impl bnd docArgs infixes = prettySe 10 bnd
12151237 (l:r:rest) -> bracket p 1 $
12161238 enclose lparen rparen (inFix l r) <+>
12171239 align (group (vsep (map (prettyArgSe bnd) rest)))
1218− where opName = prettyName impl bnd op
1240+ where opName = prettyName (ppopt_impl ppo) bnd op
12191241 f = getFixity (opStr op)
12201242 left l = case f of
12211243 Nothing -> prettySe (-1) bnd l
@@ -1235,7 +1257,7 @@ pprintPTerm impl bnd docArgs infixes = prettySe 10 bnd
12351257 fp = prettySe 1 bnd f
12361258 in
12371259 bracket p 1 . group $
1238− if impl
1260+ if ppopt_impl ppo
12391261 then if null as
12401262 then fp
12411263 else fp <+> align (vsep (map (prettyArgS bnd) as))
@@ -1340,9 +1362,9 @@ pprintPTerm impl bnd docArgs infixes = prettySe 10 bnd
13401362 basename n = n
13411363
13421364 slist' p bnd (PApp _ (PRef _ nil) _)
1343− | not impl && nsroot nil == sUN "Nil" = Just []
1365+ | not (ppopt_impl ppo) && nsroot nil == sUN "Nil" = Just []
13441366 slist' p bnd (PRef _ nil)
1345− | not impl && nsroot nil == sUN "Nil" = Just []
1367+ | not (ppopt_impl ppo) && nsroot nil == sUN "Nil" = Just []
13461368 slist' p bnd (PApp _ (PRef _ cons) args)
13471369 | nsroot cons == sUN "::",
13481370 (PExp {getTm=tl}):(PExp {getTm=hd}):imps <- reverse args,
@@ -1415,43 +1437,43 @@ prettyName showNS bnd n | Just imp <- lookup n bnd = annotate (AnnBoundName n im
14151437 strName other = show other
14161438
14171439
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
1440+showCImp :: PPOption -> PClause -> Doc OutputAnnotation
1441+showCImp ppo (PClause _ n l ws r w)
1442+ = prettyImp ppo l <+> showWs ws <+> text "=" <+> prettyImp ppo r
14211443 <+> text "where" <+> text (show w)
14221444 where
14231445 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
1446+ showWs (x : xs) = text "|" <+> prettyImp ppo x <+> showWs xs
1447+showCImp ppo (PWith _ n l ws r w)
1448+ = prettyImp ppo l <+> showWs ws <+> text "with" <+> prettyImp ppo r
14271449 <+> braces (text (show w))
14281450 where
14291451 showWs [] = empty
1430− showWs (x : xs) = text "|" <+> prettyImp impl x <+> showWs xs
1452+ showWs (x : xs) = text "|" <+> prettyImp ppo x <+> showWs xs
14311453
14321454
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))
1455+showDImp :: PPOption -> PData -> Doc OutputAnnotation
1456+showDImp ppo (PDatadecl n ty cons)
1457+ = text "data" <+> text (show n) <+> colon <+> prettyImp ppo ty <+> text "where" <$>
1458+ (indent 2 $ vsep (map (\ (_, _, n, t, _, _) -> pipe <+> prettyName False [] n <+> colon <+> prettyImp ppo t) cons))
14371459
1438−showDecls :: Bool -> [PDecl] -> Doc OutputAnnotation
1439−showDecls i ds = vsep (map (showDeclImp i) ds)
1460+showDecls :: PPOption -> [PDecl] -> Doc OutputAnnotation
1461+showDecls o ds = vsep (map (showDeclImp o) ds)
14401462
14411463showDeclImp _ (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)
1464+showDeclImp o (PTy _ _ _ _ _ n t) = text "tydecl" <+> text (showCG n) <+> colon <+> prettyImp o t
1465+showDeclImp o (PClauses _ _ n cs) = text "pat" <+> text (showCG n) <+> text "\t" <+>
1466+ indent 2 (vsep (map (showCImp o) cs))
1467+showDeclImp o (PData _ _ _ _ _ d) = showDImp o { ppopt_impl = True } d
1468+showDeclImp o (PParams _ ns ps) = text "params" <+> braces (text (show ns) <> line <> showDecls o ps <> line)
1469+showDeclImp o (PNamespace n ps) = text "namespace" <+> text n <> braces (line <> showDecls o ps <> line)
14481470showDeclImp _ (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
1471+showDeclImp o (PClass _ _ _ cs n ps _ ds)
1472+ = text "class" <+> text (show cs) <+> text (show n) <+> text (show ps) <> line <> showDecls o ds
1473+showDeclImp o (PInstance _ _ cs n _ t _ ds)
1474+ = text "instance" <+> text (show cs) <+> text (show n) <+> prettyImp o t <> line <> showDecls o ds
14531475showDeclImp _ _ = text "..."
1454−-- showDeclImp (PImport i) = "import " ++ i
1476+-- showDeclImp (PImport o) = "import " ++ o
14551477
14561478instance Show (Doc OutputAnnotation) where
14571479 show = flip (displayS . renderCompact) ""
@@ -1478,14 +1500,14 @@ getAll = map getTm
14781500-- | Show Idris name
14791501showName :: Maybe IState -- ^^ the Idris state, for information about names and colours
14801502 -> [(Name, Bool)] -- ^^ the bound variables and whether they're implicit
1481− -> Bool -- ^^ whether to show implicits
1503+ -> PPOption -- ^^ pretty printing options
14821504 -> Bool -- ^^ whether to colourise
14831505 -> Name -- ^^ the term to show
14841506 -> String
1485−showName ist bnd impl colour n = case ist of
1507+showName ist bnd ppo colour n = case ist of
14861508 Just i -> if colour then colourise n (idris_colourTheme i) else showbasic n
14871509 Nothing -> showbasic n
1488− where name = if impl then show n else showbasic n
1510+ where name = if ppopt_impl ppo then show n else showbasic n
14891511 showbasic n@(UN _) = showCG n
14901512 showbasic (MN _ s) = str s
14911513 showbasic (NS n s) = showSep "." (map str (reverse s)) ++ "." ++ showbasic n
@@ -1509,11 +1531,11 @@ showTm :: IState -- ^^ the Idris state, for information about identifiers and co
15091531 -> String
15101532showTm ist = displayDecorated (consoleDecorate ist) .
15111533 renderPretty 0.8 100000 .
1512− prettyImp (opt_showimp (idris_options ist))
1534+ prettyImp (ppOptionIst ist)
15131535
15141536-- | Show a term with implicits, no colours
15151537showTmImpls :: PTerm -> String
1516−showTmImpls = flip (displayS . renderCompact . prettyImp True) ""
1538+showTmImpls = flip (displayS . renderCompact . prettyImp verbosePPOption) ""
15171539
15181540
15191541instance Sized PTerm where