@@ -1,6 +1,7 @@
1{-# LANGUAGE PatternGuards #-}
1{-# LANGUAGE PatternGuards #-}
3−module Idris.Core.Unify(match_unify, unify, Fails, FailContext(..), FailAt(..)) where
3+module Idris.Core.Unify(match_unify, unify, Fails, FailContext(..), FailAt(..),
5import Idris.Core.TT
6import Idris.Core.TT
6import Idris.Core.Evaluate
7import Idris.Core.Evaluate
@@ -30,6 +31,16 @@ data FailContext = FailContext { fail_sourceloc :: FC,
30type Injs = [(TT Name, TT Name, TT Name)]
31type Injs = [(TT Name, TT Name, TT Name)]
31type Fails = [(TT Name, TT Name, Env, Err, [FailContext], FailAt)]
32type Fails = [(TT Name, TT Name, Env, Err, [FailContext], FailAt)]
34+unrecoverable :: Fails -> Bool
35+unrecoverable = any bad
36+ where bad (_,_,_, err, _, _) = unrec err
38+ unrec (CantUnify r _ _ _ _ _) = not r
39+ unrec (At _ e) = unrec e
40+ unrec (Elaborating _ _ e) = unrec e
41+ unrec (ElaboratingArg _ _ _ e) = unrec e
33data UInfo = UI Int Fails
44data UInfo = UI Int Fails
34 deriving Show
45 deriving Show
@@ -628,6 +639,8 @@ recoverable p@(Constant _) (App f a) = recoverable p f
628recoverable (App f a) p@(Constant _) = recoverable f p
639recoverable (App f a) p@(Constant _) = recoverable f p
629recoverable p@(P _ n _) (App f a) = recoverable p f
640recoverable p@(P _ n _) (App f a) = recoverable p f
630recoverable (App f a) p@(P _ _ _) = recoverable f p
641recoverable (App f a) p@(P _ _ _) = recoverable f p
642+recoverable (App f a) (App f' a')
643+ | f == f' = recoverable a a'
631recoverable (App f a) (App f' a')
644recoverable (App f a) (App f' a')
632 = recoverable f f' -- && recoverable a a'
645 = recoverable f f' -- && recoverable a a'
633recoverable f (Bind _ (Pi _) sc)
646recoverable f (Bind _ (Pi _) sc)