make datatype hierarchy more polymorphic