I wonder if we should have a way with the types to find the nearest common ancestor. `Types::Numeric` is alright as a catch-all, but say both are descendants of `Types::Float` we should probably return that instead of the more generic type.