homogeneous representation of types in PrologTerm