improve type_if