High Order Function with Type Parameter

I am sure you have some differences in mind, but a non-extensible tagged union is an Enum, and calling trait implementations that exist for both Nat and Pos is what "Nat + Pos" means, and you get dynamic dispatch from trait-objects.