This. 100 times this.<p>Types are a &quot;proof&quot; to the compiler that your code will run in a certain way. No missed &quot;edge cases&quot;, no fuzziness, just pure comprehensive logic.<p>Of course, the success of this varies by language and a lot of people have worked to find better and more powerful approaches.<p>But you should regard any type system as a proof system for runtime behavior.<p>(I&#x27;m not saying that running tests with arbitrary examples is bad; I&#x27;m just saying that HUGE classes of potential bugs reliably go away with good static typing.)