@@ -28,7 +28,7 @@ import qualified Control.Monad.Trans.Class as Trans (lift)
29import Data.Data (Data)
29import Data.Data (Data)
30import Data.Function (on)
30import Data.Function (on)
31−import Data.Generics.Uniplate.Data (universe)
31+import Data.Generics.Uniplate.Data (universe, children)
32import Data.List hiding (group)
32import Data.List hiding (group)
33import Data.Char
33import Data.Char
34import qualified Data.Map.Strict as M
34import qualified Data.Map.Strict as M
@@ -90,8 +90,9 @@ data IOption = IOption { opt_logLevel :: Int,
90 opt_autoImport :: [FilePath], -- ^ e.g. Builtins+Prelude
90 opt_autoImport :: [FilePath], -- ^ e.g. Builtins+Prelude
91 opt_optimise :: [Optimisation],
91 opt_optimise :: [Optimisation],
92 opt_printdepth :: Maybe Int,
92 opt_printdepth :: Maybe Int,
93− opt_evaltypes :: Bool -- ^ normalise types in :t
93+ opt_evaltypes :: Bool, -- ^ normalise types in :t
94+ opt_desugarnats :: Bool
95 deriving (Show, Eq)
96 deriving (Show, Eq)
97defaultOpts = IOption { opt_logLevel = 0
98defaultOpts = IOption { opt_logLevel = 0
@@ -117,10 +118,12 @@ defaultOpts = IOption { opt_logLevel = 0
117 , opt_optimise = defaultOptimise
118 , opt_optimise = defaultOptimise
118 , opt_printdepth = Just 5000
119 , opt_printdepth = Just 5000
119 , opt_evaltypes = True
120 , opt_evaltypes = True
121+ , opt_desugarnats = False
122data PPOption = PPOption {
124data PPOption = PPOption {
123 ppopt_impl :: Bool -- ^^ whether to show implicits
125 ppopt_impl :: Bool -- ^^ whether to show implicits
126+ , ppopt_desugarnats :: Bool
124 , ppopt_pinames :: Bool -- ^^ whether to show names in pi bindings
127 , ppopt_pinames :: Bool -- ^^ whether to show names in pi bindings
125 , ppopt_depth :: Maybe Int
128 , ppopt_depth :: Maybe Int
126} deriving (Show)
129} deriving (Show)
@@ -133,12 +136,14 @@ defaultOptimise = [PETransform]
133-- | Pretty printing options with default verbosity.
136-- | Pretty printing options with default verbosity.
134defaultPPOption :: PPOption
137defaultPPOption :: PPOption
135defaultPPOption = PPOption { ppopt_impl = False,
138defaultPPOption = PPOption { ppopt_impl = False,
139+ ppopt_desugarnats = False,
136 ppopt_pinames = False,
140 ppopt_pinames = False,
137 ppopt_depth = Just 200 }
141 ppopt_depth = Just 200 }
139-- | Pretty printing options with the most verbosity.
143-- | Pretty printing options with the most verbosity.
140verbosePPOption :: PPOption
144verbosePPOption :: PPOption
141verbosePPOption = PPOption { ppopt_impl = True,
145verbosePPOption = PPOption { ppopt_impl = True,
146+ ppopt_desugarnats = True,
142 ppopt_pinames = True,
147 ppopt_pinames = True,
143 ppopt_depth = Just 200 }
148 ppopt_depth = Just 200 }
@@ -147,7 +152,8 @@ ppOption :: IOption -> PPOption
147ppOption opt = PPOption {
152ppOption opt = PPOption {
148 ppopt_impl = opt_showimp opt,
153 ppopt_impl = opt_showimp opt,
149 ppopt_pinames = False,
154 ppopt_pinames = False,
150− ppopt_depth = opt_printdepth opt
155+ ppopt_depth = opt_printdepth opt,
156+ ppopt_desugarnats = opt_desugarnats opt
153-- | Get pretty printing options from an idris state record.
159-- | Get pretty printing options from an idris state record.
@@ -503,6 +509,7 @@ data Opt = Filename String
503 | AutoSolve -- ^ Automatically issue "solve" tactic in old-style interactive prover
509 | AutoSolve -- ^ Automatically issue "solve" tactic in old-style interactive prover
504 | UseConsoleWidth ConsoleWidth
510 | UseConsoleWidth ConsoleWidth
505 | DumpHighlights
511 | DumpHighlights
506 | NoElimDeprecationWarnings -- ^ Don't show deprecation warnings for %elim
513 | NoElimDeprecationWarnings -- ^ Don't show deprecation warnings for %elim
507 | NoOldTacticDeprecationWarnings -- ^ Don't show deprecation warnings for old-style tactics
514 | NoOldTacticDeprecationWarnings -- ^ Don't show deprecation warnings for old-style tactics
508 deriving (Show, Eq)
515 deriving (Show, Eq)
@@ -1655,7 +1662,7 @@ pprintPTerm ppo bnd docArgs infixes = prettySe (ppopt_depth ppo) startPrec bnd
1655 prettySe d p bnd (PPatvar fc n) = pretty n
1662 prettySe d p bnd (PPatvar fc n) = pretty n
1656 prettySe d p bnd e
1663 prettySe d p bnd e
1657 | Just str <- slist d p bnd e = depth d $ str
1664 | Just str <- slist d p bnd e = depth d $ str
1658− | Just n <- snat d p e = depth d $ annotate (AnnData "Nat" "") (text (show n))
1665+ | Just n <- snat ppo d p e = depth d $ annotate (AnnData "Nat" "") (text (show n))
1659 prettySe d p bnd (PRef fc _ n) = prettyName True (ppopt_impl ppo) bnd n
1666 prettySe d p bnd (PRef fc _ n) = prettyName True (ppopt_impl ppo) bnd n
1660 prettySe d p bnd (PLam fc n nfc ty sc) =
1667 prettySe d p bnd (PLam fc n nfc ty sc) =
1661 depth d . bracket p startPrec . group . align . hang 2 $
1668 depth d . bracket p startPrec . group . align . hang 2 $
@@ -1946,15 +1953,20 @@ pprintPTerm ppo bnd docArgs infixes = prettySe (ppopt_depth ppo) startPrec bnd
1947 natns = "Prelude.Nat."
1954 natns = "Prelude.Nat."
1949− snat :: Maybe Int -> Int -> PTerm -> Maybe Integer
1956+ snat :: PPOption -> Maybe Int -> Int -> PTerm -> Maybe Integer
1958+ | ppopt_desugarnats ppo = Nothing
1959+ | otherwise = snat' d p e
1961+ snat' :: Maybe Int -> Int -> PTerm -> Maybe Integer
1950− snat (Just x) _ _ | x <= 0 = Nothing
1962+ snat' (Just x) _ _ | x <= 0 = Nothing
1951− snat d p (PRef _ _ z)
1963+ snat' d p (PRef _ _ z)
1952− | show z == (natns++"Z") || show z == "Z" = Just 0
1964+ | show z == (natns++"Z") || show z == "Z" = Just 0
1953− snat d p (PApp _ s [PExp {getTm=n}])
1965+ snat' d p (PApp _ s [PExp {getTm=n}])
1954− | show s == (natns++"S") || show s == "S",
1966+ | show s == (natns++"S") || show s == "S",
1955− Just n' <- snat (decD d) p n
1967+ Just n' <- snat' (decD d) p n
1956− = Just $ 1 + n'
1968+ = Just $ 1 + n'
1957− snat _ _ _ = Nothing
1969+ snat' _ _ _ = Nothing
1959 bracket outer inner doc
1971 bracket outer inner doc
1960 | outer > inner = lparen <> doc <> rparen
1972 | outer > inner = lparen <> doc <> rparen
@@ -2167,160 +2179,183 @@ getPArity _ = 0
2167-- Return all names, free or globally bound, in the given term.
2179-- Return all names, free or globally bound, in the given term.
2169allNamesIn :: PTerm -> [Name]
2181allNamesIn :: PTerm -> [Name]
2170−allNamesIn tm = nub $ ni [] tm
2182+allNamesIn tm = nub $ ni 0 [] tm
2171 where -- TODO THINK added niTacImp, but is it right?
2183 where -- TODO THINK added niTacImp, but is it right?
2172− ni env (PRef _ _ n)
2184+ ni 0 env (PRef _ _ n)
2173 | not (n `elem` env) = [n]
2185 | not (n `elem` env) = [n]
2174− ni env (PPatvar _ n) = [n]
2186+ ni 0 env (PPatvar _ n) = [n]
2175− ni env (PApp _ f as) = ni env f ++ concatMap (ni env) (map getTm as)
2187+ ni 0 env (PApp _ f as) = ni 0 env f ++ concatMap (ni 0 env) (map getTm as)
2176− ni env (PAppBind _ f as) = ni env f ++ concatMap (ni env) (map getTm as)
2188+ ni 0 env (PAppBind _ f as) = ni 0 env f ++ concatMap (ni 0 env) (map getTm as)
2177− ni env (PCase _ c os) = ni env c ++ concatMap (ni env) (map snd os)
2189+ ni 0 env (PCase _ c os) = ni 0 env c ++ concatMap (ni 0 env) (map snd os)
2178− ni env (PIfThenElse _ c t f) = ni env c ++ ni env t ++ ni env f
2190+ ni 0 env (PIfThenElse _ c t f) = ni 0 env c ++ ni 0 env t ++ ni 0 env f
2179− ni env (PLam fc n _ ty sc) = ni env ty ++ ni (n:env) sc
2191+ ni 0 env (PLam fc n _ ty sc) = ni 0 env ty ++ ni 0 (n:env) sc
2180− ni env (PPi p n _ ty sc) = niTacImp env p ++ ni env ty ++ ni (n:env) sc
2192+ ni 0 env (PPi p n _ ty sc) = niTacImp 0 env p ++ ni 0 env ty ++ ni 0 (n:env) sc
2181− ni env (PLet _ n _ ty val sc) = ni env ty ++ ni env val ++ ni (n:env) sc
2193+ ni 0 env (PLet _ n _ ty val sc) = ni 0 env ty ++ ni 0 env val ++ ni 0 (n:env) sc
2182− ni env (PHidden tm) = ni env tm
2194+ ni 0 env (PHidden tm) = ni 0 env tm
2183− ni env (PRewrite _ l r _) = ni env l ++ ni env r
2195+ ni 0 env (PRewrite _ l r _) = ni 0 env l ++ ni 0 env r
2184− ni env (PTyped l r) = ni env l ++ ni env r
2196+ ni 0 env (PTyped l r) = ni 0 env l ++ ni 0 env r
2185− ni env (PPair _ _ _ l r) = ni env l ++ ni env r
2197+ ni 0 env (PPair _ _ _ l r) = ni 0 env l ++ ni 0 env r
2186− ni env (PDPair _ _ _ (PRef _ _ n) Placeholder r) = n : ni env r
2198+ ni 0 env (PDPair _ _ _ (PRef _ _ n) Placeholder r) = n : ni 0 env r
2187− ni env (PDPair _ _ _ (PRef _ _ n) t r) = ni env t ++ ni (n:env) r
2199+ ni 0 env (PDPair _ _ _ (PRef _ _ n) t r) = ni 0 env t ++ ni 0 (n:env) r
2188− ni env (PDPair _ _ _ l t r) = ni env l ++ ni env t ++ ni env r
2200+ ni 0 env (PDPair _ _ _ l t r) = ni 0 env l ++ ni 0 env t ++ ni 0 env r
2189− ni env (PAlternative ns a ls) = concatMap (ni env) ls
2201+ ni 0 env (PAlternative ns a ls) = concatMap (ni 0 env) ls
2190− ni env (PUnifyLog tm) = ni env tm
2202+ ni 0 env (PUnifyLog tm) = ni 0 env tm
2191− ni env (PDisamb _ tm) = ni env tm
2203+ ni 0 env (PDisamb _ tm) = ni 0 env tm
2192− ni env (PNoImplicits tm) = ni env tm
2204+ ni 0 env (PNoImplicits tm) = ni 0 env tm
2194−
2206+ ni i env (PQuasiquote tm ty) = ni (i+1) env tm ++ maybe [] (ni i env) ty
2207+ ni i env (PUnquote tm) = ni (i - 1) env tm
2209+ ni i env tm = concatMap (ni i env) (children tm)
2195− niTacImp env (TacImp _ _ scr) = ni env scr
2211+ niTacImp i env (TacImp _ _ scr) = ni i env scr
2196− niTacImp _ _ = []
2212+ niTacImp _ _ _ = []
2199-- Return all names defined in binders in the given term
2215-- Return all names defined in binders in the given term
2200boundNamesIn :: PTerm -> [Name]
2216boundNamesIn :: PTerm -> [Name]
2201−boundNamesIn tm = S.toList (ni S.empty tm)
2217+boundNamesIn tm = S.toList (ni 0 S.empty tm)
2202 where -- TODO THINK Added niTacImp, but is it right?
2218 where -- TODO THINK Added niTacImp, but is it right?
2219+ ni :: Int -> S.Set Name -> PTerm -> S.Set Name
2203− ni set (PApp _ f as) = niTms (ni set f) (map getTm as)
2220+ ni 0 set (PApp _ f as) = niTms 0 (ni 0 set f) (map getTm as)
2204− ni set (PAppBind _ f as) = niTms (ni set f) (map getTm as)
2221+ ni 0 set (PAppBind _ f as) = niTms 0 (ni 0 set f) (map getTm as)
2205− ni set (PCase _ c os) = niTms (ni set c) (map snd os)
2222+ ni 0 set (PCase _ c os) = niTms 0 (ni 0 set c) (map snd os)
2206− ni set (PIfThenElse _ c t f) = niTms set [c, t, f]
2223+ ni 0 set (PIfThenElse _ c t f) = niTms 0 set [c, t, f]
2207− ni set (PLam fc n _ ty sc) = S.insert n $ ni (ni set ty) sc
2224+ ni 0 set (PLam fc n _ ty sc) = S.insert n $ ni 0 (ni 0 set ty) sc
2208− ni set (PLet fc n nfc ty val sc) = S.insert n $ ni (ni (ni set ty) val) sc
2225+ ni 0 set (PLet fc n nfc ty val sc) = S.insert n $ ni 0 (ni 0 (ni 0 set ty) val) sc
2209− ni set (PPi p n _ ty sc) = niTacImp (S.insert n $ ni (ni set ty) sc) p
2226+ ni 0 set (PPi p n _ ty sc) = niTacImp 0 (S.insert n $ ni 0 (ni 0 set ty) sc) p
2210− ni set (PRewrite _ l r _) = ni (ni set l) r
2227+ ni 0 set (PRewrite _ l r _) = ni 0 (ni 0 set l) r
2211− ni set (PTyped l r) = ni (ni set l) r
2228+ ni 0 set (PTyped l r) = ni 0 (ni 0 set l) r
2212− ni set (PPair _ _ _ l r) = ni (ni set l) r
2229+ ni 0 set (PPair _ _ _ l r) = ni 0 (ni 0 set l) r
2213− ni set (PDPair _ _ _ (PRef _ _ n) t r) = ni (ni set t) r
2230+ ni 0 set (PDPair _ _ _ (PRef _ _ n) t r) = ni 0 (ni 0 set t) r
2214− ni set (PDPair _ _ _ l t r) = ni (ni (ni set l) t) r
2231+ ni 0 set (PDPair _ _ _ l t r) = ni 0 (ni 0 (ni 0 set l) t) r
2215− ni set (PAlternative ns a as) = niTms set as
2232+ ni 0 set (PAlternative ns a as) = niTms 0 set as
2216− ni set (PHidden tm) = ni set tm
2233+ ni 0 set (PHidden tm) = ni 0 set tm
2217− ni set (PUnifyLog tm) = ni set tm
2234+ ni 0 set (PUnifyLog tm) = ni 0 set tm
2218− ni set (PDisamb _ tm) = ni set tm
2235+ ni 0 set (PDisamb _ tm) = ni 0 set tm
2219− ni set (PNoImplicits tm) = ni set tm
2236+ ni 0 set (PNoImplicits tm) = ni 0 set tm
2220− ni set _ = set
2237+
2221−
2238+ ni i set (PQuasiquote tm ty) = ni (i + 1) set tm `S.union` maybe S.empty (ni i set) ty
2239+ ni i set (PUnquote tm) = ni (i - 1) set tm
2241+ ni i set tm = foldr S.union set (map (ni i set) (children tm))
2243+ niTms :: Int -> S.Set Name -> [PTerm] -> S.Set Name
2222− niTms set [] = set
2244+ niTms i set [] = set
2223− niTms set (x : xs) = niTms (ni set x) xs
2245+ niTms i set (x : xs) = niTms i (ni i set x) xs
2225− niTacImp set (TacImp _ _ scr) = ni set scr
2247+ niTacImp i set (TacImp _ _ scr) = ni i set scr
2226− niTacImp set _ = set
2248+ niTacImp i set _ = set
2228-- Return names which are valid implicits in the given term (type).
2250-- Return names which are valid implicits in the given term (type).
2229implicitNamesIn :: [Name] -> IState -> PTerm -> [Name]
2251implicitNamesIn :: [Name] -> IState -> PTerm -> [Name]
2230−implicitNamesIn uvars ist tm = nub $ ni [] tm
2252+implicitNamesIn uvars ist tm = nub $ ni 0 [] tm
2232− ni env (PRef _ _ n)
2254+ ni 0 env (PRef _ _ n)
2233 | not (n `elem` env)
2255 | not (n `elem` env)
2234 = case lookupTy n (tt_ctxt ist) of
2256 = case lookupTy n (tt_ctxt ist) of
2235 [] -> [n]
2257 [] -> [n]
2236 _ -> if n `elem` uvars then [n] else []
2258 _ -> if n `elem` uvars then [n] else []
2237− ni env (PApp _ f@(PRef _ _ n) as)
2259+ ni 0 env (PApp _ f@(PRef _ _ n) as)
2238− | n `elem` uvars = ni env f ++ concatMap (ni env) (map getTm as)
2260+ | n `elem` uvars = ni 0 env f ++ concatMap (ni 0 env) (map getTm as)
2239− | otherwise = concatMap (ni env) (map getTm as)
2261+ | otherwise = concatMap (ni 0 env) (map getTm as)
2240− ni env (PApp _ f as) = ni env f ++ concatMap (ni env) (map getTm as)
2262+ ni 0 env (PApp _ f as) = ni 0 env f ++ concatMap (ni 0 env) (map getTm as)
2241− ni env (PAppBind _ f as) = ni env f ++ concatMap (ni env) (map getTm as)
2263+ ni 0 env (PAppBind _ f as) = ni 0 env f ++ concatMap (ni 0 env) (map getTm as)
2242− ni env (PCase _ c os) = ni env c ++
2264+ ni 0 env (PCase _ c os) = ni 0 env c ++
2243 -- names in 'os', not counting the names bound in the cases
2265 -- names in 'os', not counting the names bound in the cases
2244− (nub (concatMap (ni env) (map snd os))
2266+ (nub (concatMap (ni 0 env) (map snd os))
2245− \\ nub (concatMap (ni env) (map fst os)))
2267+ \\ nub (concatMap (ni 0 env) (map fst os)))
2246− ni env (PIfThenElse _ c t f) = concatMap (ni env) [c, t, f]
2268+ ni 0 env (PIfThenElse _ c t f) = concatMap (ni 0 env) [c, t, f]
2247− ni env (PLam fc n _ ty sc) = ni env ty ++ ni (n:env) sc
2269+ ni 0 env (PLam fc n _ ty sc) = ni 0 env ty ++ ni 0 (n:env) sc
2248− ni env (PPi p n _ ty sc) = ni env ty ++ ni (n:env) sc
2270+ ni 0 env (PPi p n _ ty sc) = ni 0 env ty ++ ni 0 (n:env) sc
2249− ni env (PRewrite _ l r _) = ni env l ++ ni env r
2271+ ni 0 env (PRewrite _ l r _) = ni 0 env l ++ ni 0 env r
2250− ni env (PTyped l r) = ni env l ++ ni env r
2272+ ni 0 env (PTyped l r) = ni 0 env l ++ ni 0 env r
2251− ni env (PPair _ _ _ l r) = ni env l ++ ni env r
2273+ ni 0 env (PPair _ _ _ l r) = ni 0 env l ++ ni 0 env r
2252− ni env (PDPair _ _ _ (PRef _ _ n) t r) = ni env t ++ ni (n:env) r
2274+ ni 0 env (PDPair _ _ _ (PRef _ _ n) t r) = ni 0 env t ++ ni 0 (n:env) r
2253− ni env (PDPair _ _ _ l t r) = ni env l ++ ni env t ++ ni env r
2275+ ni 0 env (PDPair _ _ _ l t r) = ni 0 env l ++ ni 0 env t ++ ni 0 env r
2254− ni env (PAlternative ns a as) = concatMap (ni env) as
2276+ ni 0 env (PAlternative ns a as) = concatMap (ni 0 env) as
2255− ni env (PHidden tm) = ni env tm
2277+ ni 0 env (PHidden tm) = ni 0 env tm
2256− ni env (PUnifyLog tm) = ni env tm
2278+ ni 0 env (PUnifyLog tm) = ni 0 env tm
2257− ni env (PDisamb _ tm) = ni env tm
2279+ ni 0 env (PDisamb _ tm) = ni 0 env tm
2258− ni env (PNoImplicits tm) = ni env tm
2280+ ni 0 env (PNoImplicits tm) = ni 0 env tm
2282+ ni i env (PQuasiquote tm ty) = ni (i + 1) env tm ++
2283+ maybe [] (ni i env) ty
2284+ ni i env (PUnquote tm) = ni (i - 1) env tm
2286+ ni i env tm = concatMap (ni i env) (children tm)
2261-- Return names which are free in the given term.
2288-- Return names which are free in the given term.
2262namesIn :: [(Name, PTerm)] -> IState -> PTerm -> [Name]
2289namesIn :: [(Name, PTerm)] -> IState -> PTerm -> [Name]
2263−namesIn uvars ist tm = nub $ ni [] tm
2290+namesIn uvars ist tm = nub $ ni 0 [] tm
2265− ni env (PRef _ _ n)
2292+ ni 0 env (PRef _ _ n)
2266 | not (n `elem` env)
2293 | not (n `elem` env)
2267 = case lookupTy n (tt_ctxt ist) of
2294 = case lookupTy n (tt_ctxt ist) of
2268 [] -> [n]
2295 [] -> [n]
2269 _ -> if n `elem` (map fst uvars) then [n] else []
2296 _ -> if n `elem` (map fst uvars) then [n] else []
2270− ni env (PApp _ f as) = ni env f ++ concatMap (ni env) (map getTm as)
2297+ ni 0 env (PApp _ f as) = ni 0 env f ++ concatMap (ni 0 env) (map getTm as)
2271− ni env (PAppBind _ f as) = ni env f ++ concatMap (ni env) (map getTm as)
2298+ ni 0 env (PAppBind _ f as) = ni 0 env f ++ concatMap (ni 0 env) (map getTm as)
2272− ni env (PCase _ c os) = ni env c ++
2299+ ni 0 env (PCase _ c os) = ni 0 env c ++
2273 -- names in 'os', not counting the names bound in the cases
2300 -- names in 'os', not counting the names bound in the cases
2274− (nub (concatMap (ni env) (map snd os))
2301+ (nub (concatMap (ni 0 env) (map snd os))
2275− \\ nub (concatMap (ni env) (map fst os)))
2302+ \\ nub (concatMap (ni 0 env) (map fst os)))
2276− ni env (PIfThenElse _ c t f) = concatMap (ni env) [c, t, f]
2303+ ni 0 env (PIfThenElse _ c t f) = concatMap (ni 0 env) [c, t, f]
2277− ni env (PLam fc n nfc ty sc) = ni env ty ++ ni (n:env) sc
2304+ ni 0 env (PLam fc n nfc ty sc) = ni 0 env ty ++ ni 0 (n:env) sc
2278− ni env (PPi p n _ ty sc) = niTacImp env p ++ ni env ty ++ ni (n:env) sc
2305+ ni 0 env (PPi p n _ ty sc) = niTacImp 0 env p ++ ni 0 env ty ++ ni 0 (n:env) sc
2279− ni env (PRewrite _ l r _) = ni env l ++ ni env r
2306+ ni 0 env (PRewrite _ l r _) = ni 0 env l ++ ni 0 env r
2280− ni env (PTyped l r) = ni env l ++ ni env r
2307+ ni 0 env (PTyped l r) = ni 0 env l ++ ni 0 env r
2281− ni env (PPair _ _ _ l r) = ni env l ++ ni env r
2308+ ni 0 env (PPair _ _ _ l r) = ni 0 env l ++ ni 0 env r
2282− ni env (PDPair _ _ _ (PRef _ _ n) t r) = ni env t ++ ni (n:env) r
2309+ ni 0 env (PDPair _ _ _ (PRef _ _ n) t r) = ni 0 env t ++ ni 0 (n:env) r
2283− ni env (PDPair _ _ _ l t r) = ni env l ++ ni env t ++ ni env r
2310+ ni 0 env (PDPair _ _ _ l t r) = ni 0 env l ++ ni 0 env t ++ ni 0 env r
2284− ni env (PAlternative ns a as) = concatMap (ni env) as
2311+ ni 0 env (PAlternative ns a as) = concatMap (ni 0 env) as
2285− ni env (PHidden tm) = ni env tm
2312+ ni 0 env (PHidden tm) = ni 0 env tm
2286− ni env (PUnifyLog tm) = ni env tm
2313+ ni 0 env (PUnifyLog tm) = ni 0 env tm
2287− ni env (PDisamb _ tm) = ni env tm
2314+ ni 0 env (PDisamb _ tm) = ni 0 env tm
2288− ni env (PNoImplicits tm) = ni env tm
2315+ ni 0 env (PNoImplicits tm) = ni 0 env tm
2290−
2317+ ni i env (PQuasiquote tm ty) = ni (i + 1) env tm ++ maybe [] (ni i env) ty
2318+ ni i env (PUnquote tm) = ni (i - 1) env tm
2320+ ni i env tm = concatMap (ni i env) (children tm)
2291− niTacImp env (TacImp _ _ scr) = ni env scr
2322+ niTacImp i env (TacImp _ _ scr) = ni i env scr
2292− niTacImp _ _ = []
2323+ niTacImp _ _ _ = []
2294-- Return which of the given names are used in the given term.
2325-- Return which of the given names are used in the given term.
2296usedNamesIn :: [Name] -> IState -> PTerm -> [Name]
2327usedNamesIn :: [Name] -> IState -> PTerm -> [Name]
2297−usedNamesIn vars ist tm = nub $ ni [] tm
2328+usedNamesIn vars ist tm = nub $ ni 0 [] tm
2298 where -- TODO THINK added niTacImp, but is it right?
2329 where -- TODO THINK added niTacImp, but is it right?
2299− ni env (PRef _ _ n)
2330+ ni 0 env (PRef _ _ n)
2300 | n `elem` vars && not (n `elem` env)
2331 | n `elem` vars && not (n `elem` env)
2301 = case lookupDefExact n (tt_ctxt ist) of
2332 = case lookupDefExact n (tt_ctxt ist) of
2302 Nothing -> [n]
2333 Nothing -> [n]
2304− ni env (PApp _ f as) = ni env f ++ concatMap (ni env) (map getTm as)
2335+ ni 0 env (PApp _ f as) = ni 0 env f ++ concatMap (ni 0 env) (map getTm as)
2305− ni env (PAppBind _ f as) = ni env f ++ concatMap (ni env) (map getTm as)
2336+ ni 0 env (PAppBind _ f as) = ni 0 env f ++ concatMap (ni 0 env) (map getTm as)
2306− ni env (PCase _ c os) = ni env c ++ concatMap (ni env) (map snd os)
2337+ ni 0 env (PCase _ c os) = ni 0 env c ++ concatMap (ni 0 env) (map snd os)
2307− ni env (PIfThenElse _ c t f) = concatMap (ni env) [c, t, f]
2338+ ni 0 env (PIfThenElse _ c t f) = concatMap (ni 0 env) [c, t, f]
2308− ni env (PLam fc n _ ty sc) = ni env ty ++ ni (n:env) sc
2339+ ni 0 env (PLam fc n _ ty sc) = ni 0 env ty ++ ni 0 (n:env) sc
2309− ni env (PPi p n _ ty sc) = niTacImp env p ++ ni env ty ++ ni (n:env) sc
2340+ ni 0 env (PPi p n _ ty sc) = niTacImp 0 env p ++ ni 0 env ty ++ ni 0 (n:env) sc
2310− ni env (PRewrite _ l r _) = ni env l ++ ni env r
2341+ ni 0 env (PRewrite _ l r _) = ni 0 env l ++ ni 0 env r
2311− ni env (PTyped l r) = ni env l ++ ni env r
2342+ ni 0 env (PTyped l r) = ni 0 env l ++ ni 0 env r
2312− ni env (PPair _ _ _ l r) = ni env l ++ ni env r
2343+ ni 0 env (PPair _ _ _ l r) = ni 0 env l ++ ni 0 env r
2313− ni env (PDPair _ _ _ (PRef _ _ n) t r) = ni env t ++ ni (n:env) r
2344+ ni 0 env (PDPair _ _ _ (PRef _ _ n) t r) = ni 0 env t ++ ni 0 (n:env) r
2314− ni env (PDPair _ _ _ l t r) = ni env l ++ ni env t ++ ni env r
2345+ ni 0 env (PDPair _ _ _ l t r) = ni 0 env l ++ ni 0 env t ++ ni 0 env r
2315− ni env (PAlternative ns a as) = concatMap (ni env) as
2346+ ni 0 env (PAlternative ns a as) = concatMap (ni 0 env) as
2316− ni env (PHidden tm) = ni env tm
2347+ ni 0 env (PHidden tm) = ni 0 env tm
2317− ni env (PUnifyLog tm) = ni env tm
2348+ ni 0 env (PUnifyLog tm) = ni 0 env tm
2318− ni env (PDisamb _ tm) = ni env tm
2349+ ni 0 env (PDisamb _ tm) = ni 0 env tm
2319− ni env (PNoImplicits tm) = ni env tm
2350+ ni 0 env (PNoImplicits tm) = ni 0 env tm
2321−
2352+ ni i env (PQuasiquote tm ty) = ni (i + 1) env tm ++ maybe [] (ni i env) ty
2353+ ni i env (PUnquote tm) = ni (i - 1) env tm
2355+ ni i env tm = concatMap (ni i env) (children tm)
2322− niTacImp env (TacImp _ _ scr) = ni env scr
2357+ niTacImp i env (TacImp _ _ scr) = ni i env scr
2323− niTacImp _ _ = []
2358+ niTacImp _ _ _ = []
2325-- Return the list of inaccessible (= dotted) positions for a name.
2360-- Return the list of inaccessible (= dotted) positions for a name.
2326getErasureInfo :: IState -> Name -> [Int]
2361getErasureInfo :: IState -> Name -> [Int]