I doubt your experience with Rust if you refer to its decision to opt for function-local type inference as &quot;incorrect&quot;. Whole-program type inference works for scripts, but for programming in the large it&#x27;s sheer horror. I want my functions to provide certain contracts, and I don&#x27;t want to have to read the function body to ensure those contracts are upheld (and neither does the typechecker). Typed function signatures keep errors local and are the feature that keeps implicit return values from becoming a footgun.