@@ -379,9 +379,10 @@ unify ctxt env topx topy dont holes =
379 unArgs vs xs ys
379 unArgs vs xs ys
381 metavarApp tm = let (f, args) = unApply tm in
381 metavarApp tm = let (f, args) = unApply tm in
382− metavar f &&
382+ (metavar f &&
383− all (\x -> metavarApp x) args
383+ all (\x -> metavarApp x) args
384− && nub args == args
384+ && nub args == args) ||
385 metavarArgs tm = let (f, args) = unApply tm in
386 metavarArgs tm = let (f, args) = unApply tm in
386 all (\x -> metavar x || inenv x) args
387 all (\x -> metavar x || inenv x) args
387 && nub args == args
388 && nub args == args
@@ -413,14 +414,22 @@ unify ctxt env topx topy dont holes =
414 rigid (P (DCon _ _) _ _) = True
415 rigid (P (DCon _ _) _ _) = True
415 rigid (P (TCon _ _) _ _) = True
416 rigid (P (TCon _ _) _ _) = True
416− rigid t@(P Ref _ _) = inenv t
417+ rigid t@(P Ref _ _) = inenv t || globmetavar t
417 rigid (Constant _) = True
418 rigid (Constant _) = True
418 rigid (App f a) = rigid f && rigid a
419 rigid (App f a) = rigid f && rigid a
419− rigid t = not (metavar t)
420+ rigid t = not (metavar t) || globmetavar t
422+ globmetavar t = case unApply t of
424+ case lookupDef x ctxt of
425+ [TyDecl _ _] -> True
421 metavar t = case t of
429 metavar t = case t of
422− P _ x _ -> (x `elem` holes || holeIn env x) &&
430+ P _ x _ -> ((x `elem` holes || holeIn env x) &&
423− not (x `elem` dont)
431+ not (x `elem` dont))
424 _ -> False
433 _ -> False
425 pat t = case t of
434 pat t = case t of
426 P _ x _ -> x `elem` holes || patIn env x
435 P _ x _ -> x `elem` holes || patIn env x