Globalized type inferrence is still a problem when you want to build large programs. You change the implementation of one function and 20 functions further there is a problem and you need to figure out all the interactions on the path between. Rust strikes a great compromise here IMO.