0 | module TTImp.Elab.Hole
2 | import Core.Context.Log
5 | import Core.Normalise
9 | import TTImp.Elab.Check
17 | mkPrecise : {auto c : Ref Ctxt Defs} ->
19 | mkPrecise (NApp _ (NMeta n i _) _)
20 | = updateDef (Resolved i)
22 | Hole i p => Just (Hole i ({ precisetype := True} p))
24 | mkPrecise _ = pure ()
27 | checkHole : {vars : _} ->
28 | {auto c : Ref Ctxt Defs} ->
29 | {auto m : Ref MD Metadata} ->
30 | {auto u : Ref UST UState} ->
31 | {auto e : Ref EST (EState vars)} ->
32 | RigCount -> ElabInfo ->
33 | NestedNames vars -> Env Term vars ->
34 | FC -> UserName -> Maybe (Glued vars) ->
35 | Core (Term vars, Glued vars)
36 | checkHole rig elabinfo nest env fc n_in (Just gexpty)
37 | = do nm <- inCurrentNS (UN n_in)
39 | Nothing <- lookupCtxtExact nm (gamma defs)
40 | | _ => do log "elab.hole" 1 $
show nm ++ " already defined"
41 | throw (AlreadyDefined fc nm)
42 | expty <- getTerm gexpty
47 | let env' = letToLam env
48 | (idx, metaval) <- metaVarI fc rig env' nm expty
49 | mkPrecise !(getNF gexpty)
51 | withCurrentLHS (Resolved idx)
53 | addUserHole False nm
55 | pure (metaval, gexpty)
56 | checkHole rig elabinfo nest env fc n_in exp
57 | = do nmty <- genName ("type_of_" ++ show n_in)
58 | let env' = letToLam env
60 | ty <- metaVar fc erased env' nmty (TType fc u)
61 | nm <- inCurrentNS (UN n_in)
63 | mkPrecise !(nf defs env' ty)
65 | Nothing <- lookupCtxtExact nm (gamma defs)
66 | | _ => do log "elab.hole" 1 $
show nm ++ " already defined"
67 | throw (AlreadyDefined fc nm)
68 | (idx, metaval) <- metaVarI fc rig env' nm ty
69 | withCurrentLHS (Resolved idx)
71 | addUserHole False nm
73 | pure (metaval, gnf env ty)