reimplement order between types