@@ -65,6 +65,7 @@ data Tactic = Attack
6565 | PatBind Name
6666 | Focus Name
6767 | Defer Name
68+ | DeferType Name Raw [Name]
6869 | Instance Name
6970 | MoveLast Name
7071 | ProofState
@@ -298,6 +299,18 @@ defer n ctxt env (Bind x (Hole t) (P nt x' ty)) | x == x' =
298299
299300 getP (n, b) = P Bound n (binderTy b)
300301
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)))
310+ where
311+ getP n = case lookup n env of
312+ Just b -> P Bound n (binderTy b)
313+
301314regret :: RunTactic
302315regret ctxt env (Bind x (Hole t) sc) | noOccurrence x sc =
303316 do action (\ps -> let hs = holes ps in
@@ -577,27 +590,28 @@ process EndUnify _
577590 let (h, _) = unified ps
578591 tactic (Just h) solve_unified
579592process t h = tactic (Just h) (mktac t)
580− where mktac Attack = attack
581− mktac (Claim n r) = claim n r
582− mktac (Exact r) = exact r
583− mktac (Fill r) = fill r
584− mktac (PrepFill n ns) = prep_fill n ns
585− mktac CompleteFill = complete_fill
586− mktac Regret = regret
587− mktac Solve = solve
588− mktac (StartUnify n) = start_unify n
589− mktac Compute = compute
590− mktac (Intro n) = intro n
591− mktac (IntroTy ty n) = introTy ty n
592− mktac (Forall n t) = forall n t
593− mktac (LetBind n t v) = letbind n t v
594− mktac (Rewrite t) = rewrite t
595− mktac (PatVar n) = patvar n
596− mktac (PatBind n) = patbind n
597− mktac (CheckIn r) = check_in r
598− mktac (EvalIn r) = eval_in r
599− mktac (Focus n) = focus n
600− mktac (Defer n) = defer n
601− mktac (Instance n) = instanceArg n
602− mktac (MoveLast n) = movelast n
593+ where mktac Attack = attack
594+ mktac (Claim n r) = claim n r
595+ mktac (Exact r) = exact r
596+ mktac (Fill r) = fill r
597+ mktac (PrepFill n ns) = prep_fill n ns
598+ mktac CompleteFill = complete_fill
599+ mktac Regret = regret
600+ mktac Solve = solve
601+ mktac (StartUnify n) = start_unify n
602+ mktac Compute = compute
603+ mktac (Intro n) = intro n
604+ mktac (IntroTy ty n) = introTy ty n
605+ mktac (Forall n t) = forall n t
606+ mktac (LetBind n t v) = letbind n t v
607+ mktac (Rewrite t) = rewrite t
608+ mktac (PatVar n) = patvar n
609+ mktac (PatBind n) = patbind n
610+ mktac (CheckIn r) = check_in r
611+ mktac (EvalIn r) = eval_in r
612+ mktac (Focus n) = focus n
613+ mktac (Defer n) = defer n
614+ mktac (DeferType n t a) = deferType n t a
615+ mktac (Instance n) = instanceArg n
616+ mktac (MoveLast n) = movelast n
603617