@@ -96,7 +96,8 @@ match_unify ctxt env topx topy inj holes from =
96 un names x y
96 un names x y
97 | OK True <- convEq' ctxt holes x y = do sc 1; return []
97 | OK True <- convEq' ctxt holes x y = do sc 1; return []
98 | otherwise = do UI s f <- get
98 | otherwise = do UI s f <- get
99− let r = recoverable x y
99+ let r = recoverable (normalise ctxt env x)
100+ (normalise ctxt env y)
100 let err = cantUnify from r
101 let err = cantUnify from r
101 topx topy (CantUnify r x y (Msg "") (errEnv env) s) (errEnv env) s
102 topx topy (CantUnify r x y (Msg "") (errEnv env) s) (errEnv env) s
102 if (not r) then lift $ tfail err
103 if (not r) then lift $ tfail err
@@ -110,7 +111,8 @@ match_unify ctxt env topx topy inj holes from =
110 uB bnames (Lam tx) (Lam ty) = un bnames tx ty
111 uB bnames (Lam tx) (Lam ty) = un bnames tx ty
111 uB bnames (Pi tx) (Pi ty) = un bnames tx ty
112 uB bnames (Pi tx) (Pi ty) = un bnames tx ty
112 uB bnames x y = do UI s f <- get
113 uB bnames x y = do UI s f <- get
113− let r = recoverable (binderTy x) (binderTy y)
114+ let r = recoverable (normalise ctxt env (binderTy x))
115+ (normalise ctxt env (binderTy y))
114 let err = cantUnify from r topx topy
116 let err = cantUnify from r topx topy
115 (CantUnify r (binderTy x) (binderTy y) (Msg "") (errEnv env) s)
117 (CantUnify r (binderTy x) (binderTy y) (Msg "") (errEnv env) s)
116 (errEnv env) s
118 (errEnv env) s
@@ -124,7 +126,8 @@ match_unify ctxt env topx topy inj holes from =
124 put (UI (s+i) f)
126 put (UI (s+i) f)
126 unifyFail x y = do UI s f <- get
128 unifyFail x y = do UI s f <- get
127− let r = recoverable x y
129+ let r = recoverable (normalise ctxt env x)
130+ (normalise ctxt env y)
128 let err = cantUnify from r
131 let err = cantUnify from r
129 topx topy (CantUnify r x y (Msg "") (errEnv env) s) (errEnv env) s
132 topx topy (CantUnify r x y (Msg "") (errEnv env) s) (errEnv env) s
130 put (UI s ((x, y, env, err, from, Match) : f))
133 put (UI s ((x, y, env, err, from, Match) : f))
@@ -377,7 +380,8 @@ unify ctxt env topx topy inj holes from =
377 un' fn bnames x y
380 un' fn bnames x y
378 | OK True <- convEq' ctxt holes x y = do sc 1; return []
381 | OK True <- convEq' ctxt holes x y = do sc 1; return []
379 | otherwise = do UI s f <- get
382 | otherwise = do UI s f <- get
380− let r = recoverable x y
383+ let r = recoverable (normalise ctxt env x)
384+ (normalise ctxt env y)
381 let err = cantUnify from r
385 let err = cantUnify from r
382 topx topy (CantUnify r x y (Msg "") (errEnv env) s) (errEnv env) s
386 topx topy (CantUnify r x y (Msg "") (errEnv env) s) (errEnv env) s
383 if (not r) then lift $ tfail err
387 if (not r) then lift $ tfail err
@@ -477,7 +481,7 @@ unify ctxt env topx topy inj holes from =
477 unifyTmpFail :: Term -> Term -> StateT UInfo TC [(Name, TT Name)]
481 unifyTmpFail :: Term -> Term -> StateT UInfo TC [(Name, TT Name)]
478 unifyTmpFail x y
482 unifyTmpFail x y
479 = do UI s f <- get
483 = do UI s f <- get
480− let r = recoverable x y
484+ let r = recoverable (normalise ctxt env x) (normalise ctxt env y)
481 let err = cantUnify from r
485 let err = cantUnify from r
482 topx topy (CantUnify r x y (Msg "") (errEnv env) s) (errEnv env) s
486 topx topy (CantUnify r x y (Msg "") (errEnv env) s) (errEnv env) s
483 put (UI s ((topx, topy, env, err, from, Unify) : f))
487 put (UI s ((topx, topy, env, err, from, Unify) : f))
@@ -485,7 +489,7 @@ unify ctxt env topx topy inj holes from =
486 -- shortcut failure, if we *know* nothing can fix it
490 -- shortcut failure, if we *know* nothing can fix it
487 unifyFail x y = do UI s f <- get
491 unifyFail x y = do UI s f <- get
488− let r = recoverable x y
492+ let r = recoverable (normalise ctxt env x) (normalise ctxt env y)
489 let err = cantUnify from r
493 let err = cantUnify from r
490 topx topy (CantUnify r x y (Msg "") (errEnv env) s) (errEnv env) s
494 topx topy (CantUnify r x y (Msg "") (errEnv env) s) (errEnv env) s
491 put (UI s ((topx, topy, env, err, from, Unify) : f))
495 put (UI s ((topx, topy, env, err, from, Unify) : f))
@@ -507,7 +511,8 @@ unify ctxt env topx topy inj holes from =
507 uB bnames (Hole tx) (Hole ty) = un' False bnames tx ty
511 uB bnames (Hole tx) (Hole ty) = un' False bnames tx ty
508 uB bnames (PVar tx) (PVar ty) = un' False bnames tx ty
512 uB bnames (PVar tx) (PVar ty) = un' False bnames tx ty
509 uB bnames x y = do UI s f <- get
513 uB bnames x y = do UI s f <- get
510− let r = recoverable (binderTy x) (binderTy y)
514+ let r = recoverable (normalise ctxt env (binderTy x))
515+ (normalise ctxt env (binderTy y))
511 let err = cantUnify from r topx topy
516 let err = cantUnify from r topx topy
512 (CantUnify r (binderTy x) (binderTy y) (Msg "") (errEnv env) s)
517 (CantUnify r (binderTy x) (binderTy y) (Msg "") (errEnv env) s)
513 (errEnv env) s
518 (errEnv env) s
@@ -577,6 +582,7 @@ envPos x i ((y, _) : ys) | x == y = i
577-- more work may help.
582-- more work may help.
578-- FIXME: Depending on how overloading gets used, this may cause problems. Better
583-- FIXME: Depending on how overloading gets used, this may cause problems. Better
579-- rethink overloading properly...
584-- rethink overloading properly...
585+-- ASSUMPTION: inputs are in normal form
581recoverable t@(App _ _) _
587recoverable t@(App _ _) _
582 | (P _ (UN l) _, _) <- unApply t, l == txt "Lazy" = False
588 | (P _ (UN l) _, _) <- unApply t, l == txt "Lazy" = False
@@ -597,7 +603,7 @@ recoverable (P (TCon _ _) x _) (P (DCon _ _) y _) = False
597recoverable p@(Constant _) (App f a) = recoverable p f
603recoverable p@(Constant _) (App f a) = recoverable p f
598recoverable (App f a) p@(Constant _) = recoverable f p
604recoverable (App f a) p@(Constant _) = recoverable f p
599recoverable p@(P _ n _) (App f a) = recoverable p f
605recoverable p@(P _ n _) (App f a) = recoverable p f
600−-- recoverable (App f a) p@(P _ _ _) = recoverable f p
606+recoverable (App f a) p@(P _ _ _) = recoverable f p
601recoverable (App f a) (App f' a')
607recoverable (App f a) (App f' a')
602 = recoverable f f' -- && recoverable a a'
608 = recoverable f f' -- && recoverable a a'
603recoverable f (Bind _ (Pi _) sc)
609recoverable f (Bind _ (Pi _) sc)