There are a number of ways to classify the type symbols. Most basically, it should be possible to partition the Type class according to the predicate, function, and constant object categories mentioned above, as shown by the top portion of a possible type class derivation hierarchy in Figure 8.4.