Type inference
The upside of type inference is that making small changes to types upstream doesn&#x27;t necessary incur changes to code downstream.<p>But the downside of type inference is that it makes reading code harder and you may depend on an IDE to know what your intermediate types are. Especially wrt generics and higher-order types where intermediate function calls don&#x27;t have a concrete type in their signature.<p>Nothing demonstrates this better than any time you&#x27;ve written code yourself only to immediately invoke the IDE tooling to inspect what the type is. If you didn&#x27;t know, good luck to the person reading it in git diffs. I&#x27;ve had to git clone someone&#x27;s Rust project recently just to follow the type transformation across a bunch of future&#x2F;stream chains.<p>This isn&#x27;t an argument against static typing but rather an argument against inference excess. There&#x27;s a nice middle ground where asserting the concrete type in critical places makes the code more readable but also checks your own assumptions. Like any time you received Maybe&lt;Maybe&lt;Int&gt;&gt; where you wanted Maybe&lt;Int&gt;.