The lack of function overloading was really the only thing holding OCaml back 15 years ago. Last I checked, there was no interest in changing this.
Case in point: Java does allow exactly this, while also allowing classes to implement interfaces very similarly to how Rust structs can implement traits. Rust code sometimes uses traits to achieve similar results, like the `slice::get(index: SliceIndex<[T]>)` function, but the example above can't be done.