@@ -28,8 +28,12 @@ data ElabInfo = EInfo { params :: [(Name, PTerm)],
2828
2929toplevel = EInfo [] emptyContext id
3030
31+recheckC ctxt env t = do (tm, ty, cs) <- tclift $ recheck ctxt env t
32+ addConstraints cs
33+ return (tm, ty)
34+
3135checkDef ns = do ctxt <- getContext
32− mapM (\(n, t) -> do (t', _) <- tclift $ recheck ctxt [] t
36+ mapM (\(n, t) -> do (t', _) <- recheckC ctxt [] t
3337 return (n, t')) ns
3438
3539elabType :: ElabInfo -> SyntaxInfo -> FC -> Name -> PTerm -> Idris ()
@@ -41,9 +45,9 @@ elabType info syn fc n ty' = {- let ty' = piBind (params info) ty_in
4145 ty' <- implicit syn n ty'
4246 let ty = addImpl i ty'
4347 logLvl 2 $ show n ++ " type " ++ showImp True ty
44− ((ty', defer), log) <- tclift $ elaborate ctxt n (Set 0)
48+ ((ty', defer), log) <- tclift $ elaborate ctxt n (Set (UVal 0))
4549 (erun fc (build i info False ty))
46− (cty, _) <- tclift $ recheck ctxt [] ty'
50+ (cty, _) <- recheckC ctxt [] ty'
4751 logLvl 2 $ "---> " ++ show cty
4852 let nty = normalise ctxt [] cty
4953 ds <- checkDef ((n, nty):defer)
@@ -57,11 +61,11 @@ elabData info syn fc (PDatadecl n t_in dcons)
5761 i <- get
5862 t_in <- implicit syn n t_in
5963 let t = addImpl i t_in
60− ((t', defer), log) <- tclift $ elaborate ctxt n (Set 0)
64+ ((t', defer), log) <- tclift $ elaborate ctxt n (Set (UVal 0))
6165 (erun fc (build i info False t))
6266 def' <- checkDef defer
6367 addDeferred def'
64− (cty, _) <- tclift $ recheck ctxt [] t'
68+ (cty, _) <- recheckC ctxt [] t'
6569 logLvl 2 $ "---> " ++ show cty
6670 updateContext (addTyDecl n cty) -- temporary, to check cons
6771 cons <- mapM (elabCon info syn) dcons
@@ -76,13 +80,13 @@ elabCon info syn (n, t_in, fc)
7680 t_in <- implicit syn n t_in
7781 let t = addImpl i t_in
7882 logLvl 2 $ show fc ++ ":Constructor " ++ show n ++ " : " ++ showImp True t
79− ((t', defer), log) <- tclift $ elaborate ctxt n (Set 0)
83+ ((t', defer), log) <- tclift $ elaborate ctxt n (Set (UVal 0))
8084 (erun fc (build i info False t))
8185 logLvl 2 $ "Rechecking " ++ show t'
8286 def' <- checkDef defer
8387 addDeferred def'
8488 ctxt <- getContext
85− (cty, _) <- tclift $ recheck ctxt [] t'
89+ (cty, _) <- recheckC ctxt [] t'
8690 logLvl 2 $ "---> " ++ show n ++ " : " ++ show cty
8791 return (n, cty)
8892
@@ -118,7 +122,7 @@ elabVal info aspat tm_in
118122 logLvl 3 ("Value: " ++ show tm')
119123 let vtm = getInferTerm tm'
120124 logLvl 2 (show vtm)
121− tclift $ recheck ctxt [] vtm
125+ recheckC ctxt [] vtm
122126
123127elabClause :: ElabInfo -> FC -> PClause -> Idris (Term, Term)
124128elabClause info fc (PClause fname lhs_in withs rhs_in whereblock)
@@ -133,7 +137,7 @@ elabClause info fc (PClause fname lhs_in withs rhs_in whereblock)
133137 let lhs_tm = orderPats (getInferTerm lhs')
134138 let lhs_ty = getInferType lhs'
135139 logLvl 3 (show lhs_tm)
136− (clhs, clhsty) <- tclift $ recheck ctxt [] lhs_tm
140+ (clhs, clhsty) <- recheckC ctxt [] lhs_tm
137141 logLvl 5 ("Checked " ++ show clhs)
138142 -- Elaborate where block
139143 ist <- getIState
@@ -163,7 +167,7 @@ elabClause info fc (PClause fname lhs_in withs rhs_in whereblock)
163167 def' <- checkDef defer
164168 addDeferred def'
165169 ctxt <- getContext
166− (crhs, crhsty) <- tclift $ recheck ctxt [] rhs'
170+ (crhs, crhsty) <- recheckC ctxt [] rhs'
167171 return (clhs, crhs)
168172 where
169173 decorate x = UN (show fname ++ "#" ++ show x)
@@ -193,7 +197,7 @@ elabClause info fc (PWith fname lhs_in withs wval_in withblock)
193197 let lhs_ty = getInferType lhs'
194198 let ret_ty = getRetTy lhs_ty
195199 logLvl 3 (show lhs_tm)
196− (clhs, clhsty) <- tclift $ recheck ctxt [] lhs_tm
200+ (clhs, clhsty) <- recheckC ctxt [] lhs_tm
197201 logLvl 5 ("Checked " ++ show clhs)
198202 let bargs = getPBtys lhs_tm
199203 let wval = addImpl i wval_in
@@ -210,7 +214,7 @@ elabClause info fc (PWith fname lhs_in withs wval_in withblock)
210214 return (tt, d))
211215 def' <- checkDef defer
212216 addDeferred def'
213− (cwval, cwvalty) <- tclift $ recheck ctxt [] (getInferTerm wval')
217+ (cwval, cwvalty) <- recheckC ctxt [] (getInferTerm wval')
214218 logLvl 3 ("With type " ++ show cwvalty ++ "\nRet type " ++ show ret_ty)
215219 windex <- getName
216220 -- build a type declaration for the new function:
@@ -245,7 +249,7 @@ elabClause info fc (PWith fname lhs_in withs wval_in withblock)
245249 return (tt, d))
246250 def' <- checkDef defer
247251 addDeferred def'
248− (crhs, crhsty) <- tclift $ recheck ctxt [] rhs'
252+ (crhs, crhsty) <- recheckC ctxt [] rhs'
249253 return (clhs, crhs)
250254 where
251255 getImps (Bind n (Pi _) t) = pexp Placeholder : getImps t
@@ -522,7 +526,7 @@ elab ist info pattern tm
522526 local f = do e <- get_env
523527 return (f `elem` map fst e)
524528
525− elab' PSet = do fill (RSet 0); solve
529+ elab' PSet = do fill RSet; solve
526530 elab' (PConstant c) = do apply (RConstant c) []; solve
527531 elab' (PQuote r) = do fill r; solve
528532 elab' (PTrue fc) = try (elab' (PRef fc unitCon))
@@ -560,7 +564,7 @@ elab ist info pattern tm
560564 pexp l, pexp r])
561565 elab' (PRef fc n) | pattern && not (inparamBlock n)
562566 = do ctxt <- get_context
563− let sc = case lookupCtxt n ctxt of
567+ let sc = case lookupTy n ctxt of
564568 Nothing -> True
565569 _ -> False
566570 if sc
@@ -576,7 +580,7 @@ elab ist info pattern tm
576580 = do attack; intro (Just n); elabE sc; solve
577581 elab' (PLam n ty sc)
578582 = do tyn <- unique_hole (MN 0 "lamty")
579− claim tyn (RSet 0)
583+ claim tyn RSet
580584 attack
581585 introTy (Var tyn) (Just n)
582586 -- end_unify
@@ -588,7 +592,7 @@ elab ist info pattern tm
588592 = do attack; arg n (MN 0 "ty"); elabE sc; solve
589593 elab' (PPi _ n ty sc)
590594 = do attack; tyn <- unique_hole (MN 0 "ty")
591− claim tyn (RSet 0)
595+ claim tyn RSet
592596 n' <- case n of
593597 MN _ _ -> unique_hole n
594598 _ -> return n
@@ -600,7 +604,7 @@ elab ist info pattern tm
600604 elab' (PLet n ty val sc)
601605 = do attack;
602606 tyn <- unique_hole (MN 0 "letty")
603− claim tyn (RSet 0)
607+ claim tyn RSet
604608 valn <- unique_hole (MN 0 "letval")
605609 claim valn (Var tyn)
606610 letbind n (Var tyn) (Var valn)
@@ -682,7 +686,7 @@ resolveTC depth ist
682686 = do t <- goal
683687 tm <- get_term
684688 try (trivial ist)
685− (blunderbuss t (map fst (toAlist (tt_ctxt ist))))
689+ (blunderbuss t (map fst (ctxtAlist (tt_ctxt ist))))
686690 where
687691 blunderbuss t [] = fail $ "Can't resolve type class " ++ show t
688692 blunderbuss t (n:ns) | tcname n = try (resolve n depth)
@@ -753,7 +757,7 @@ runTac autoSolve ist tac = runT (fmap (addImpl ist) tac) where
753757 = do attack; -- (h:_) <- get_holes
754758 tyn <- unique_hole (MN 0 "rty")
755759 -- start_unify h
756− claim tyn (RSet 0)
760+ claim tyn RSet
757761 valn <- unique_hole (MN 0 "rval")
758762 claim valn (Var tyn)
759763 letn <- unique_hole (MN 0 "rewrite_rule")
@@ -765,7 +769,7 @@ runTac autoSolve ist tac = runT (fmap (addImpl ist) tac) where
765769 runT (LetTac n tm)
766770 = do attack
767771 tyn <- unique_hole (MN 0 "letty")
768− claim tyn (RSet 0)
772+ claim tyn RSet
769773 valn <- unique_hole (MN 0 "letval")
770774 claim valn (Var tyn)
771775 letn <- unique_hole n