@@ -81,7 +81,10 @@ build ist info pattern opts fn tm
81buildTC :: IState -> ElabInfo -> Bool -> FnOpts -> Name -> PTerm ->
81buildTC :: IState -> ElabInfo -> Bool -> FnOpts -> Name -> PTerm ->
82 ElabD (Term, [(Name, (Int, Maybe Name, Type))], [PDecl])
82 ElabD (Term, [(Name, (Int, Maybe Name, Type))], [PDecl])
83buildTC ist info pattern opts fn tm
83buildTC ist info pattern opts fn tm
84+ = do -- set name supply to begin after highest index in tm
85+ let ns = allNamesIn tm
84− = do elab ist info pattern opts fn tm
87+ elab ist info pattern opts fn tm
85 probs <- get_probs
88 probs <- get_probs
86 tm <- get_term
89 tm <- get_term
87 case probs of
90 case probs of
@@ -171,18 +174,18 @@ elab ist info pattern opts fn tm
171 elab' ina (PResolveTC (FC "HACK" _ _)) -- for chasing parent classes
174 elab' ina (PResolveTC (FC "HACK" _ _)) -- for chasing parent classes
172 = do g <- goal; resolveTC 5 g fn ist
175 = do g <- goal; resolveTC 5 g fn ist
173 elab' ina (PResolveTC fc)
176 elab' ina (PResolveTC fc)
174− | True = do c <- unique_hole (MN 0 "class")
177+ | True = do c <- getNameFrom (MN 0 "class")
175 instanceArg c
178 instanceArg c
176 | otherwise = do g <- goal
179 | otherwise = do g <- goal
177 try (resolveTC 2 g fn ist)
180 try (resolveTC 2 g fn ist)
178− (do c <- unique_hole (MN 0 "class")
181+ (do c <- getNameFrom (MN 0 "class")
179 instanceArg c)
182 instanceArg c)
180 elab' ina (PRefl fc t)
183 elab' ina (PRefl fc t)
181− = elab' ina (PApp fc (PRef fc eqCon) [pimp (MN 0 "a") Placeholder True,
184+ = elab' ina (PApp fc (PRef fc eqCon) [pimp (MN 0 "A") Placeholder True,
182 pimp (MN 0 "x") t False])
185 pimp (MN 0 "x") t False])
183 elab' ina (PEq fc l r) = elab' ina (PApp fc (PRef fc eqTy)
186 elab' ina (PEq fc l r) = elab' ina (PApp fc (PRef fc eqTy)
184− [pimp (MN 0 "a") Placeholder True,
187+ [pimp (MN 0 "A") Placeholder True,
185− pimp (MN 0 "b") Placeholder False,
188+ pimp (MN 0 "B") Placeholder False,
186 pexp l, pexp r])
189 pexp l, pexp r])
187 elab' ina@(_, a, inty) (PPair fc l r)
190 elab' ina@(_, a, inty) (PPair fc l r)
188 = do hnf_compute
191 = do hnf_compute
@@ -272,7 +275,7 @@ elab ist info pattern opts fn tm
272 elab' ina@(_, a, inty) (PLam n ty sc)
275 elab' ina@(_, a, inty) (PLam n ty sc)
273 = do hsin <- get_holes
276 = do hsin <- get_holes
274 ptmin <- get_term
277 ptmin <- get_term
275− tyn <- unique_hole (MN 0 "lamty")
278+ tyn <- getNameFrom (MN 0 "lamty")
276 checkPiGoal n
279 checkPiGoal n
277 claim tyn RType
280 claim tyn RType
278 explicit tyn
281 explicit tyn
@@ -290,7 +293,7 @@ elab ist info pattern opts fn tm
290 elab' ina@(_, a, _) (PPi _ n Placeholder sc)
293 elab' ina@(_, a, _) (PPi _ n Placeholder sc)
291 = do attack; arg n (MN 0 "ty"); elabE (True, a, True) sc; solve
294 = do attack; arg n (MN 0 "ty"); elabE (True, a, True) sc; solve
292 elab' ina@(_, a, _) (PPi _ n ty sc)
295 elab' ina@(_, a, _) (PPi _ n ty sc)
293− = do attack; tyn <- unique_hole (MN 0 "ty")
296+ = do attack; tyn <- getNameFrom (MN 0 "ty")
294 claim tyn RType
297 claim tyn RType
295 n' <- case n of
298 n' <- case n of
296 MN _ _ -> unique_hole n
299 MN _ _ -> unique_hole n
@@ -302,9 +305,9 @@ elab ist info pattern opts fn tm
303 elab' ina@(_, a, inty) (PLet n ty val sc)
306 elab' ina@(_, a, inty) (PLet n ty val sc)
304 = do attack;
307 = do attack;
305− tyn <- unique_hole (MN 0 "letty")
308+ tyn <- getNameFrom (MN 0 "letty")
306 claim tyn RType
309 claim tyn RType
307− valn <- unique_hole (MN 0 "letval")
310+ valn <- getNameFrom (MN 0 "letval")
308 claim valn (Var tyn)
311 claim valn (Var tyn)
309 explicit valn
312 explicit valn
310 letbind n (Var tyn) (Var valn)
313 letbind n (Var tyn) (Var valn)
@@ -325,9 +328,9 @@ elab ist info pattern opts fn tm
325 elab' ina@(_, a, inty) (PGoal fc r n sc) = do
328 elab' ina@(_, a, inty) (PGoal fc r n sc) = do
326 rty <- goal
329 rty <- goal
328− tyn <- unique_hole (MN 0 "letty")
331+ tyn <- getNameFrom (MN 0 "letty")
329 claim tyn RType
332 claim tyn RType
330− valn <- unique_hole (MN 0 "letval")
333+ valn <- getNameFrom (MN 0 "letval")
331 claim valn (Var tyn)
334 claim valn (Var tyn)
332 letbind n (Var tyn) (Var valn)
335 letbind n (Var tyn) (Var valn)
333 focus valn
336 focus valn
@@ -346,7 +349,7 @@ elab ist info pattern opts fn tm
346 -- new function name
349 -- new function name
347 env <- get_env
350 env <- get_env
348 argTys <- claimArgTys env args
351 argTys <- claimArgTys env args
349− fn <- unique_hole (MN 0 "inf_fn")
352+ fn <- getNameFrom (MN 0 "inf_fn")
350 let fty = fnTy argTys rty
353 let fty = fnTy argTys rty
351-- trace (show (ptm, map fst argTys)) $ focus fn
354-- trace (show (ptm, map fst argTys)) $ focus fn
352 -- build and defer the function application
355 -- build and defer the function application
@@ -360,8 +363,8 @@ elab ist info pattern opts fn tm
360 ans <- claimArgTys env xs
363 ans <- claimArgTys env xs
361 return ((n, (False, forget nty)) : ans)
364 return ((n, (False, forget nty)) : ans)
362 claimArgTys env (_ : xs)
365 claimArgTys env (_ : xs)
363− = do an <- unique_hole (MN 0 "inf_argTy")
366+ = do an <- getNameFrom (MN 0 "inf_argTy")
364− aval <- unique_hole (MN 0 "inf_arg")
367+ aval <- getNameFrom (MN 0 "inf_arg")
365 claim an RType
368 claim an RType
366 claim aval (Var an)
369 claim aval (Var an)
367 ans <- claimArgTys env xs
370 ans <- claimArgTys env xs
@@ -394,16 +397,12 @@ elab ist info pattern opts fn tm
394 | isTConName f (tt_ctxt ist) && pattern && not reflect && not inty
397 | isTConName f (tt_ctxt ist) && pattern && not reflect && not inty
395 = lift $ tfail (Msg "Typecase is not allowed")
398 = lift $ tfail (Msg "Typecase is not allowed")
396 -- if f is local, just do a simple_app
399 -- if f is local, just do a simple_app
397− elab' (ina, g, inty) tm@(PApp fc (PRef _ f) args')
400+ elab' (ina, g, inty) tm@(PApp fc (PRef _ f) args)
398− = do let args = {- case lookupCtxt f (inblock info) of
399− Just ps -> (map (pexp . (PRef fc)) ps ++ args')
401−-- newtm <- mkSpecialised ist fc f (map getTm args') tm
402− env <- get_env
401+ = do env <- get_env
403− if (f `elem` map fst env && length args' == 1)
402+ if (f `elem` map fst env && length args == 1)
404 then -- simple app, as below
403 then -- simple app, as below
405 do simple_app (elabE (ina, g, inty) (PRef fc f))
404 do simple_app (elabE (ina, g, inty) (PRef fc f))
406− (elabE (True, g, inty) (getTm (head args')))
405+ (elabE (True, g, inty) (getTm (head args)))
407 (show tm)
406 (show tm)
@@ -416,7 +415,7 @@ elab ist info pattern opts fn tm
416 -- we can unify with them
415 -- we can unify with them
417 case lookupCtxt f (idris_classes ist) of
416 case lookupCtxt f (idris_classes ist) of
418 [] -> return ()
417 [] -> return ()
419− _ -> mapM_ setInjective (map getTm args')
418+ _ -> mapM_ setInjective (map getTm args)
420 ctxt <- get_context
419 ctxt <- get_context
421 let guarded = isConName f ctxt
420 let guarded = isConName f ctxt
422 ns <- apply (Var f) (map isph args)
421 ns <- apply (Var f) (map isph args)
@@ -429,7 +428,7 @@ elab ist info pattern opts fn tm
429 (zip ns args)
428 (zip ns args)
430 elabArgs (ina || not isinf, guarded, inty)
429 elabArgs (ina || not isinf, guarded, inty)
431 [] fc False ns' (map (\x -> (lazyarg x, getTm x)) eargs)
430 [] fc False ns' (map (\x -> (lazyarg x, getTm x)) eargs)
432− mkSpecialised ist fc f (map getTm args') tm
431+ mkSpecialised ist fc f (map getTm args) tm
434 ptm <- get_term
433 ptm <- get_term
435 ivs' <- get_instances
434 ivs' <- get_instances
@@ -478,11 +477,11 @@ elab ist info pattern opts fn tm
478 elab' ina (PElabError e) = fail (pshow ist e)
477 elab' ina (PElabError e) = fail (pshow ist e)
479 elab' ina (PRewrite fc r sc newg)
478 elab' ina (PRewrite fc r sc newg)
480 = do attack
479 = do attack
481− tyn <- unique_hole (MN 0 "rty")
480+ tyn <- getNameFrom (MN 0 "rty")
482 claim tyn RType
481 claim tyn RType
483− valn <- unique_hole (MN 0 "rval")
482+ valn <- getNameFrom (MN 0 "rval")
484 claim valn (Var tyn)
483 claim valn (Var tyn)
485− letn <- unique_hole (MN 0 "rewrite_rule")
484+ letn <- getNameFrom (MN 0 "rewrite_rule")
486 letbind letn (Var tyn) (Var valn)
485 letbind letn (Var tyn) (Var valn)
487 focus valn
486 focus valn
488 elab' ina r
487 elab' ina r
@@ -497,11 +496,11 @@ elab ist info pattern opts fn tm
498 where doEquiv t sc =
497 where doEquiv t sc =
499 do attack
498 do attack
500− tyn <- unique_hole (MN 0 "ety")
499+ tyn <- getNameFrom (MN 0 "ety")
501 claim tyn RType
500 claim tyn RType
502− valn <- unique_hole (MN 0 "eqval")
501+ valn <- getNameFrom (MN 0 "eqval")
503 claim valn (Var tyn)
502 claim valn (Var tyn)
504− letn <- unique_hole (MN 0 "equiv_val")
503+ letn <- getNameFrom (MN 0 "equiv_val")
505 letbind letn (Var tyn) (Var valn)
504 letbind letn (Var tyn) (Var valn)
506 focus tyn
505 focus tyn
507 elab' ina t
506 elab' ina t
@@ -511,10 +510,10 @@ elab ist info pattern opts fn tm
512 elab' ina@(_, a, inty) c@(PCase fc scr opts)
511 elab' ina@(_, a, inty) c@(PCase fc scr opts)
513 = do attack
512 = do attack
514− tyn <- unique_hole (MN 0 "scty")
513+ tyn <- getNameFrom (MN 0 "scty")
515 claim tyn RType
514 claim tyn RType
516− valn <- unique_hole (MN 0 "scval")
515+ valn <- getNameFrom (MN 0 "scval")
517− scvn <- unique_hole (MN 0 "scvar")
516+ scvn <- getNameFrom (MN 0 "scvar")
518 claim valn (Var tyn)
517 claim valn (Var tyn)
519 letbind scvn (Var tyn) (Var valn)
518 letbind scvn (Var tyn) (Var valn)
520 focus valn
519 focus valn
@@ -872,11 +871,11 @@ runTac autoSolve ist tac
872 when autoSolve solveAll
871 when autoSolve solveAll
873 runT (Equiv tm) -- let bind tm, then
872 runT (Equiv tm) -- let bind tm, then
874 = do attack
873 = do attack
875− tyn <- unique_hole (MN 0 "ety")
874+ tyn <- getNameFrom (MN 0 "ety")
876 claim tyn RType
875 claim tyn RType
877− valn <- unique_hole (MN 0 "eqval")
876+ valn <- getNameFrom (MN 0 "eqval")
878 claim valn (Var tyn)
877 claim valn (Var tyn)
879− letn <- unique_hole (MN 0 "equiv_val")
878+ letn <- getNameFrom (MN 0 "equiv_val")
880 letbind letn (Var tyn) (Var valn)
879 letbind letn (Var tyn) (Var valn)
881 focus tyn
880 focus tyn
882 elab ist toplevel False [] (MN 0 "tac") tm
881 elab ist toplevel False [] (MN 0 "tac") tm
@@ -884,12 +883,12 @@ runTac autoSolve ist tac
884 when autoSolve solveAll
883 when autoSolve solveAll
885 runT (Rewrite tm) -- to elaborate tm, let bind it, then rewrite by that
884 runT (Rewrite tm) -- to elaborate tm, let bind it, then rewrite by that
886 = do attack; -- (h:_) <- get_holes
885 = do attack; -- (h:_) <- get_holes
887− tyn <- unique_hole (MN 0 "rty")
886+ tyn <- getNameFrom (MN 0 "rty")
888 -- start_unify h
887 -- start_unify h
889 claim tyn RType
888 claim tyn RType
890− valn <- unique_hole (MN 0 "rval")
889+ valn <- getNameFrom (MN 0 "rval")
891 claim valn (Var tyn)
890 claim valn (Var tyn)
892− letn <- unique_hole (MN 0 "rewrite_rule")
891+ letn <- getNameFrom (MN 0 "rewrite_rule")
893 letbind letn (Var tyn) (Var valn)
892 letbind letn (Var tyn) (Var valn)
894 focus valn
893 focus valn
895 elab ist toplevel False [] (MN 0 "tac") tm
894 elab ist toplevel False [] (MN 0 "tac") tm
@@ -900,9 +899,9 @@ runTac autoSolve ist tac
900 when autoSolve solveAll
899 when autoSolve solveAll
901 runT (LetTac n tm)
900 runT (LetTac n tm)
902 = do attack
901 = do attack
903− tyn <- unique_hole (MN 0 "letty")
902+ tyn <- getNameFrom (MN 0 "letty")
904 claim tyn RType
903 claim tyn RType
905− valn <- unique_hole (MN 0 "letval")
904+ valn <- getNameFrom (MN 0 "letval")
906 claim valn (Var tyn)
905 claim valn (Var tyn)
907 letn <- unique_hole n
906 letn <- unique_hole n
908 letbind letn (Var tyn) (Var valn)
907 letbind letn (Var tyn) (Var valn)
@@ -911,9 +910,9 @@ runTac autoSolve ist tac
911 when autoSolve solveAll
910 when autoSolve solveAll
912 runT (LetTacTy n ty tm)
911 runT (LetTacTy n ty tm)
913 = do attack
912 = do attack
914− tyn <- unique_hole (MN 0 "letty")
913+ tyn <- getNameFrom (MN 0 "letty")
915 claim tyn RType
914 claim tyn RType
916− valn <- unique_hole (MN 0 "letval")
915+ valn <- getNameFrom (MN 0 "letval")
917 claim valn (Var tyn)
916 claim valn (Var tyn)
918 letn <- unique_hole n
917 letn <- unique_hole n
919 letbind letn (Var tyn) (Var valn)
918 letbind letn (Var tyn) (Var valn)
@@ -933,16 +932,16 @@ runTac autoSolve ist tac
933 runT (ApplyTactic tm) = do tenv <- get_env -- store the environment
932 runT (ApplyTactic tm) = do tenv <- get_env -- store the environment
934 tgoal <- goal -- store the goal
933 tgoal <- goal -- store the goal
935 attack -- let f : List (TTName, Binder TT) -> TT -> Tactic = tm in ...
934 attack -- let f : List (TTName, Binder TT) -> TT -> Tactic = tm in ...
936− script <- unique_hole (MN 0 "script")
935+ script <- getNameFrom (MN 0 "script")
937 claim script scriptTy
936 claim script scriptTy
938− scriptvar <- unique_hole (MN 0 "scriptvar" )
937+ scriptvar <- getNameFrom (MN 0 "scriptvar" )
939 letbind scriptvar scriptTy (Var script)
938 letbind scriptvar scriptTy (Var script)
940 focus script
939 focus script
941 elab ist toplevel False [] (MN 0 "tac") tm
940 elab ist toplevel False [] (MN 0 "tac") tm
942 (script', _) <- get_type_val (Var scriptvar)
941 (script', _) <- get_type_val (Var scriptvar)
943 -- now that we have the script apply
942 -- now that we have the script apply
944 -- it to the reflected goal and context
943 -- it to the reflected goal and context
945− restac <- unique_hole (MN 0 "restac")
944+ restac <- getNameFrom (MN 0 "restac")
946 claim restac tacticTy
945 claim restac tacticTy
947 focus restac
946 focus restac
948 fill (raw_apply (forget script')
947 fill (raw_apply (forget script')
@@ -965,9 +964,9 @@ runTac autoSolve ist tac
965 -- goal, then apply the resulting reflected Tactic
964 -- goal, then apply the resulting reflected Tactic
966 = do tgoal <- goal
965 = do tgoal <- goal
968− script <- unique_hole (MN 0 "script")
967+ script <- getNameFrom (MN 0 "script")
969 claim script scriptTy
968 claim script scriptTy
970− scriptvar <- unique_hole (MN 0 "scriptvar" )
969+ scriptvar <- getNameFrom (MN 0 "scriptvar" )
971 letbind scriptvar scriptTy (Var script)
970 letbind scriptvar scriptTy (Var script)
972 focus script
971 focus script
973 ptm <- get_term
972 ptm <- get_term
@@ -976,7 +975,7 @@ runTac autoSolve ist tac
976 (script', _) <- get_type_val (Var scriptvar)
975 (script', _) <- get_type_val (Var scriptvar)
977 -- now that we have the script apply
976 -- now that we have the script apply
978 -- it to the reflected goal
977 -- it to the reflected goal
979− restac <- unique_hole (MN 0 "restac")
978+ restac <- getNameFrom (MN 0 "restac")
980 claim restac tacticTy
979 claim restac tacticTy
981 focus restac
980 focus restac
982 fill (forget script')
981 fill (forget script')
@@ -992,11 +991,11 @@ runTac autoSolve ist tac
992 scriptTy = tacticTy
991 scriptTy = tacticTy
994 runT (Reflect v) = do attack -- let x = reflect v in ...
993 runT (Reflect v) = do attack -- let x = reflect v in ...
995− tyn <- unique_hole (MN 0 "letty")
994+ tyn <- getNameFrom (MN 0 "letty")
996 claim tyn RType
995 claim tyn RType
997− valn <- unique_hole (MN 0 "letval")
996+ valn <- getNameFrom (MN 0 "letval")
998 claim valn (Var tyn)
997 claim valn (Var tyn)
999− letn <- unique_hole (MN 0 "letvar")
998+ letn <- getNameFrom (MN 0 "letvar")
1000 letbind letn (Var tyn) (Var valn)
999 letbind letn (Var tyn) (Var valn)
1001 focus valn
1000 focus valn
1002 elab ist toplevel False [] (MN 0 "tac") v
1001 elab ist toplevel False [] (MN 0 "tac") v
@@ -1006,11 +1005,11 @@ runTac autoSolve ist tac
1006 let value' = hnf ctxt env value
1005 let value' = hnf ctxt env value
1007 runTac autoSolve ist (Exact $ PQuote (reflect value'))
1006 runTac autoSolve ist (Exact $ PQuote (reflect value'))
1008 runT (Fill v) = do attack -- let x = fill x in ...
1007 runT (Fill v) = do attack -- let x = fill x in ...
1009− tyn <- unique_hole (MN 0 "letty")
1008+ tyn <- getNameFrom (MN 0 "letty")
1010 claim tyn RType
1009 claim tyn RType
1011− valn <- unique_hole (MN 0 "letval")
1010+ valn <- getNameFrom (MN 0 "letval")
1012 claim valn (Var tyn)
1011 claim valn (Var tyn)
1013− letn <- unique_hole (MN 0 "letvar")
1012+ letn <- getNameFrom (MN 0 "letvar")
1014 letbind letn (Var tyn) (Var valn)
1013 letbind letn (Var tyn) (Var valn)
1015 focus valn
1014 focus valn
1016 elab ist toplevel False [] (MN 0 "tac") v
1015 elab ist toplevel False [] (MN 0 "tac") v