MooseX::Types::VariantTable implements a simple dispatch table based on Moose type constraints. Subtypes will be checked before their parents, meaning that the order of the declaration does not matter.