@@ -29,14 +29,16 @@ toplevel = EInfo [] emptyContext id Nothing
2929
3030-- Also find deferred names in the term and their types
3131
32−build :: IState -> ElabInfo -> Bool -> PTerm -> Elab (Term, [(Name, Type)])
33−build ist info pattern tm
34− = do elab ist info pattern tm
32+build :: IState -> ElabInfo -> Bool -> Name -> PTerm ->
33+ Elab (Term, [(Name, Type)])
34+build ist info pattern fn tm
35+ = do elab ist info pattern fn tm
3536 tt <- get_term
3637 return $ runState (collectDeferred tt) []
3738
38−elab :: IState -> ElabInfo -> Bool -> PTerm -> Elab ()
39−elab ist info pattern tm
39+elab :: IState -> ElabInfo -> Bool -> Name -> PTerm ->
40+ Elab ()
41+elab ist info pattern fn tm
4042 = do elabE tm
4143 when pattern -- convert remaining holes to pattern vars
4244 mkPat
@@ -69,7 +71,7 @@ elab ist info pattern tm
6971 (elab' (PRef fc unitTy))
7072 elab' (PFalse fc) = elab' (PRef fc falseTy)
7173 elab' (PResolveTC (FC "HACK" _)) -- for chasing parent classes
72− = resolveTC 2 ist
74+ = resolveTC 2 fn ist
7375 elab' (PResolveTC fc) = do c <- unique_hole (MN 0 "c")
7476 instanceArg c
7577 elab' (PRefl fc) = elab' (PApp fc (PRef fc eqCon) [pimp (MN 0 "a") Placeholder,
@@ -175,7 +177,7 @@ elab ist info pattern tm
175177 ivs' <- get_instances
176178 when (not pattern) $
177179 mapM_ (\n -> do focus n
178− resolveTC 7 ist) (ivs' \\ ivs)
180+ resolveTC 7 fn ist) (ivs' \\ ivs)
179181-- ivs <- get_instances
180182-- when (not (null ivs)) $
181183-- do t <- get_term
@@ -231,17 +233,17 @@ pruneAlt xs = map prune xs
231233 headIs f _ = True -- keep if it's not an application
232234
233235trivial :: IState -> Elab ()
234−trivial ist = try (elab ist toplevel False (PRefl (FC "prf" 0)))
236+trivial ist = try (elab ist toplevel False (MN 0 "tac") (PRefl (FC "prf" 0)))
235237 (do env <- get_env
236238 tryAll (map fst env))
237239 where
238240 tryAll [] = fail "No trivial solution"
239− tryAll (x:xs) = try (elab ist toplevel False (PRef (FC "prf" 0) x))
241+ tryAll (x:xs) = try (elab ist toplevel False (MN 0 "tac") (PRef (FC "prf" 0) x))
240242 (tryAll xs)
241243
242−resolveTC :: Int -> IState -> Elab ()
243−resolveTC 0 ist = fail $ "Can't resolve type class"
244−resolveTC depth ist
244+resolveTC :: Int -> Name -> IState -> Elab ()
245+resolveTC 0 fn ist = fail $ "Can't resolve type class"
246+resolveTC depth fn ist
245247 = try (trivial ist)
246248 (do t <- goal
247249 let (tc, ttypes) = unApply t
@@ -251,7 +253,7 @@ resolveTC depth ist
251253-- (tryAll (map elabTC (map fst (ctxtAlist (tt_ctxt ist)))))
252254 blunderbuss t (map fst (ctxtAlist (tt_ctxt ist))))
253255 where
254− elabTC n | tcname n = (resolve n depth, show n)
256+ elabTC n | n /= fn && tcname n = (resolve n depth, show n)
255257 | otherwise = (fail "Can't resolve", show n)
256258
257259 needsDefault t num@(P _ (NS (UN "Num") ["builtins"]) _) [P Bound a _]
@@ -266,8 +268,8 @@ resolveTC depth ist
266268 boundVar _ = False
267269
268270 blunderbuss t [] = fail $ "Can't resolve type class " ++ show t
269− blunderbuss t (n:ns) | tcname n = try (resolve n depth)
270− (blunderbuss t ns)
271+ blunderbuss t (n:ns) | n /= fn && tcname n = try (resolve n depth)
272+ (blunderbuss t ns)
271273 | otherwise = blunderbuss t ns
272274 tcname (UN ('@':_)) = True
273275 tcname (NS n _) = tcname n
@@ -282,7 +284,7 @@ resolveTC depth ist
282284 [args] -> map isImp (snd args) -- won't be overloaded!
283285 args <- apply (Var n) imps
284286 mapM_ (\ (_,n) -> do focus n
285− resolveTC (depth - 1) ist)
287+ resolveTC (depth - 1) fn ist)
286288 (filter (\ (x, y) -> not x) (zip (map fst imps) args))
287289 solve
288290 where isImp (PImp p _ _ _) = (True, p)
@@ -314,7 +316,7 @@ runTac autoSolve ist tac = runT (fmap (addImpl ist) tac) where
314316 bname (Bind n _ _) = Just n
315317 bname _ = Nothing
316318 runT (Intro xs) = mapM_ (\x -> do attack; intro (Just x)) xs
317− runT (Exact tm) = do elab ist toplevel False tm
319+ runT (Exact tm) = do elab ist toplevel False (MN 0 "tac") tm
318320 when autoSolve solveAll
319321 runT (Refine fn [])
320322 = do (fn', imps) <- case lookupCtxtName Nothing fn (idris_implicits ist) of
@@ -343,7 +345,7 @@ runTac autoSolve ist tac = runT (fmap (addImpl ist) tac) where
343345 letn <- unique_hole (MN 0 "rewrite_rule")
344346 letbind letn (Var tyn) (Var valn)
345347 focus valn
346− elab ist toplevel False tm
348+ elab ist toplevel False (MN 0 "tac") tm
347349 rewrite (Var letn)
348350 when autoSolve solveAll
349351 runT (LetTac n tm)
@@ -355,7 +357,7 @@ runTac autoSolve ist tac = runT (fmap (addImpl ist) tac) where
355357 letn <- unique_hole n
356358 letbind letn (Var tyn) (Var valn)
357359 focus valn
358− elab ist toplevel False tm
360+ elab ist toplevel False (MN 0 "tac") tm
359361 when autoSolve solveAll
360362 runT Compute = compute
361363 runT Trivial = do trivial ist; when autoSolve solveAll