If I can define functions on types in my module, then I can expose functions that accept types and pass them around within my module without having to track what kind of type they are, without having to define N new types for N supported external types, without having to write giant case statements it is only purpose is to determine what is being passed in so that I can wrap it up in a struct who's