@@ -95,9 +95,11 @@ errAt thing n elab = do s <- get
95 case runStateT elab s of
95 case runStateT elab s of
96 OK (a, s') -> do put s'
96 OK (a, s') -> do put s'
97 return $! a
97 return $! a
98− Error (At f e) ->
98+ Error e -> lift $ Error (rewriteErr e)
99− lift $ Error (At f (Elaborating thing n e))
99+ where
100+ rewriteErr (At f e) = At f (rewriteErr e)
101+ rewriteErr (ProofSearchFail e) = ProofSearchFail (rewriteErr e)
100− Error e -> lift $ Error (Elaborating thing n e)
102+ rewriteErr e = Elaborating thing n e
102erun :: FC -> Elab' aux a -> Elab' aux a
104erun :: FC -> Elab' aux a -> Elab' aux a
103erun f elab = do s <- get
105erun f elab = do s <- get
@@ -780,9 +782,7 @@ handleError p t1 t2
780 Error e1 -> if p e1 then
782 Error e1 -> if p e1 then
781 do case runStateT t2 s of
783 do case runStateT t2 s of
782 OK (v, s') -> do put s'; return $! v
784 OK (v, s') -> do put s'; return $! v
783− Error e2 -> if score e1 >= score e2
784− then lift (tfail e1)
785− else lift (tfail e2)
785+ Error e2 -> lift (tfail e2)
786 else lift (tfail e1)
786 else lift (tfail e1)
788try' :: Elab' aux a -> Elab' aux a -> Bool -> Elab' aux a
788try' :: Elab' aux a -> Elab' aux a -> Bool -> Elab' aux a
@@ -798,9 +798,7 @@ try' t1 t2 proofSearch
798 if recoverableErr e1 then
798 if recoverableErr e1 then
799 do case runStateT t2 s of
799 do case runStateT t2 s of
800 OK (v, s') -> do put s'; return $! v
800 OK (v, s') -> do put s'; return $! v
801− Error e2 -> if score e1 >= score e2
802− then lift (tfail e1)
803− else lift (tfail e2)
801+ Error e2 -> lift (tfail e2)
804 else lift (tfail e1)
802 else lift (tfail e1)
805 where recoverableErr err@(CantUnify r x y _ _ _)
803 where recoverableErr err@(CantUnify r x y _ _ _)
806 = -- traceWhen r (show err) $
804 = -- traceWhen r (show err) $
@@ -827,9 +825,7 @@ tryCatch t1 t2
827 case runStateT (t2 e1) s of
825 case runStateT (t2 e1) s of
828 OK (v, s') -> do put s'
826 OK (v, s') -> do put s'
829 return $! v
827 return $! v
830− Error e2 -> if score e1 >= score e2
831− then lift (tfail e1)
832− else lift (tfail e2)
828+ Error e2 -> lift (tfail e2)
834tryWhen :: Bool -> Elab' aux a -> Elab' aux a -> Elab' aux a
830tryWhen :: Bool -> Elab' aux a -> Elab' aux a -> Elab' aux a
835tryWhen True a b = try a b
831tryWhen True a b = try a b
@@ -839,7 +835,7 @@ tryWhen False a b = a
839-- to False, then the whole tactic fails if there are any new problems
835-- to False, then the whole tactic fails if there are any new problems
840tryAll :: [(Elab' aux a, Name)] -> Elab' aux a
836tryAll :: [(Elab' aux a, Name)] -> Elab' aux a
841tryAll [(x, _)] = x
837tryAll [(x, _)] = x
842−tryAll xs = tryAll' [] 999999 (cantResolve, 0) xs
838+tryAll xs = tryAll' [] 999999 xs
844 cantResolve :: Elab' aux a
840 cantResolve :: Elab' aux a
845 cantResolve = lift $ tfail $ CantResolveAlts (map snd xs)
841 cantResolve = lift $ tfail $ CantResolveAlts (map snd xs)
@@ -849,13 +845,12 @@ tryAll xs = tryAll' [] 999999 (cantResolve, 0) xs
850 tryAll' :: [Elab' aux a] -> -- successes
846 tryAll' :: [Elab' aux a] -> -- successes
851 Int -> -- most problems
847 Int -> -- most problems
852− (Elab' aux a, Int) -> -- smallest failure
853 [(Elab' aux a, Name)] -> -- still to try
848 [(Elab' aux a, Name)] -> -- still to try
854 Elab' aux a
849 Elab' aux a
855− tryAll' [res] pmax _ [] = res
850+ tryAll' [res] pmax [] = res
856− tryAll' (_:_) pmax _ [] = cantResolve
851+ tryAll' (_:_) pmax [] = cantResolve
857− tryAll' [] pmax (f, _) [] = noneValid
852+ tryAll' [] pmax [] = noneValid
858− tryAll' cs pmax f ((x, msg):xs)
853+ tryAll' cs pmax ((x, msg):xs)
859 = do s <- get
854 = do s <- get
860 ps <- get_probs
855 ps <- get_probs
861 case prunStateT pmax True ps x s of
856 case prunStateT pmax True ps x s of
@@ -863,16 +858,9 @@ tryAll xs = tryAll' [] 999999 (cantResolve, 0) xs
863 do let cs' = if (newps < pmax)
858 do let cs' = if (newps < pmax)
864 then [do put s'; return $! v]
859 then [do put s'; return $! v]
865 else (do put s'; return $! v) : cs
860 else (do put s'; return $! v) : cs
866− tryAll' cs' newps f xs
861+ tryAll' cs' newps xs
867 Error err -> do put s
862 Error err -> do put s
868−-- if (score err) < 100
869− tryAll' cs pmax (better err f) xs
863+ tryAll' cs pmax xs
870−-- else tryAll' [] pmax (better err f) xs -- give up
873− better err (f, i) = let s = score err in
874− if (s >= i) then (lift (tfail err), s)
877-- Run an elaborator, and fail if any problems are introduced
865-- Run an elaborator, and fail if any problems are introduced
878prunStateT
866prunStateT