@@ -529,13 +529,19 @@ unify ctxt env (topx, xfrom) (topy, yfrom) inj holes usersupp from =
529 (do hf <- un' env True bnames fx fy
529 (do hf <- un' env True bnames fx fy
530 let ax' = hnormalise hf ctxt env (substNames hf ax)
530 let ax' = hnormalise hf ctxt env (substNames hf ax)
531 let ay' = hnormalise hf ctxt env (substNames hf ay)
531 let ay' = hnormalise hf ctxt env (substNames hf ay)
532+ -- Don't normalise if we don't have to
533+ ha <- uplus (un' env False bnames (substNames hf ax)
532− ha <- un' env False bnames ax' ay'
535+ (un' env False bnames ax' ay')
534 combine env bnames hf ha)
537 combine env bnames hf ha)
535 (do ha <- un' env False bnames ax ay
538 (do ha <- un' env False bnames ax ay
536 let fx' = hnormalise ha ctxt env (substNames ha fx)
539 let fx' = hnormalise ha ctxt env (substNames ha fx)
537 let fy' = hnormalise ha ctxt env (substNames ha fy)
540 let fy' = hnormalise ha ctxt env (substNames ha fy)
541+ -- Don't normalise if we don't have to
538− hf <- un' env False bnames fx' fy'
542+ hf <- uplus (un' env False bnames (substNames ha fx)
544+ (un' env False bnames fx' fy')
540 combine env bnames hf ha)
546 combine env bnames hf ha)
541 | otherwise = unifyTmpFail appx appy
547 | otherwise = unifyTmpFail appx appy
@@ -551,14 +557,6 @@ unify ctxt env (topx, xfrom) (topy, yfrom) inj holes usersupp from =
551 = unifyFail appx appy
557 = unifyFail appx appy
552 checkHeads _ _ = return []
558 checkHeads _ _ = return []
554− unArgs as [] [] = return as
555− unArgs as (x : xs) (y : ys)
556− = do let x' = hnormalise as ctxt env (substNames as x)
557− let y' = hnormalise as ctxt env (substNames as y)
558− as' <- un' env False bnames x' y'
559− vs <- combine env bnames as as'
562 numArgs tm = let (f, args) = unApply tm in length args
560 numArgs tm = let (f, args) = unApply tm in length args
564 metavarApp tm = let (f, args) = unApply tm in
562 metavarApp tm = let (f, args) = unApply tm in