type unification instead of equality