@@ -65,6 +65,7 @@ data Tactic = Attack
65 | PatBind Name
65 | PatBind Name
66 | Focus Name
66 | Focus Name
67 | Defer Name
67 | Defer Name
68+ | DeferType Name Raw [Name]
68 | Instance Name
69 | Instance Name
69 | MoveLast Name
70 | MoveLast Name
70 | ProofState
71 | ProofState
@@ -298,6 +299,18 @@ defer n ctxt env (Bind x (Hole t) (P nt x' ty)) | x == x' =
299 getP (n, b) = P Bound n (binderTy b)
300 getP (n, b) = P Bound n (binderTy b)
302+-- as defer, but build the type and application explicitly
303+deferType :: Name -> Raw -> [Name] -> RunTactic
304+deferType n fty_in args ctxt env (Bind x (Hole t) (P nt x' ty)) | x == x' =
305+ do (fty, _) <- lift $ check ctxt env fty_in
306+ action (\ps -> let hs = holes ps in
307+ ps { holes = hs \\ [x] })
308+ return (Bind n (GHole fty)
309+ (mkApp (P Ref n ty) (map getP args)))
311+ getP n = case lookup n env of
312+ Just b -> P Bound n (binderTy b)
301regret :: RunTactic
314regret :: RunTactic
302regret ctxt env (Bind x (Hole t) sc) | noOccurrence x sc =
315regret ctxt env (Bind x (Hole t) sc) | noOccurrence x sc =
303 do action (\ps -> let hs = holes ps in
316 do action (\ps -> let hs = holes ps in
@@ -577,27 +590,28 @@ process EndUnify _
577 let (h, _) = unified ps
590 let (h, _) = unified ps
578 tactic (Just h) solve_unified
591 tactic (Just h) solve_unified
579process t h = tactic (Just h) (mktac t)
592process t h = tactic (Just h) (mktac t)
580− where mktac Attack = attack
593+ where mktac Attack = attack
581− mktac (Claim n r) = claim n r
594+ mktac (Claim n r) = claim n r
582− mktac (Exact r) = exact r
595+ mktac (Exact r) = exact r
583− mktac (Fill r) = fill r
596+ mktac (Fill r) = fill r
584− mktac (PrepFill n ns) = prep_fill n ns
597+ mktac (PrepFill n ns) = prep_fill n ns
585− mktac CompleteFill = complete_fill
598+ mktac CompleteFill = complete_fill
586− mktac Regret = regret
599+ mktac Regret = regret
587− mktac Solve = solve
600+ mktac Solve = solve
588− mktac (StartUnify n) = start_unify n
601+ mktac (StartUnify n) = start_unify n
589− mktac Compute = compute
602+ mktac Compute = compute
590− mktac (Intro n) = intro n
603+ mktac (Intro n) = intro n
591− mktac (IntroTy ty n) = introTy ty n
604+ mktac (IntroTy ty n) = introTy ty n
592− mktac (Forall n t) = forall n t
605+ mktac (Forall n t) = forall n t
593− mktac (LetBind n t v) = letbind n t v
606+ mktac (LetBind n t v) = letbind n t v
594− mktac (Rewrite t) = rewrite t
607+ mktac (Rewrite t) = rewrite t
595− mktac (PatVar n) = patvar n
608+ mktac (PatVar n) = patvar n
596− mktac (PatBind n) = patbind n
609+ mktac (PatBind n) = patbind n
597− mktac (CheckIn r) = check_in r
610+ mktac (CheckIn r) = check_in r
598− mktac (EvalIn r) = eval_in r
611+ mktac (EvalIn r) = eval_in r
599− mktac (Focus n) = focus n
612+ mktac (Focus n) = focus n
600− mktac (Defer n) = defer n
613+ mktac (Defer n) = defer n
614+ mktac (DeferType n t a) = deferType n t a
601− mktac (Instance n) = instanceArg n
615+ mktac (Instance n) = instanceArg n
602− mktac (MoveLast n) = movelast n
616+ mktac (MoveLast n) = movelast n