I think the whole system would be a little cleaner if we just bite the bullet and create `Type` subclasses for all of the `PrimitiveKind` values