change unify to use decycling (from Lamdu) for more correct recursive type unification