&gt; Well you can&#x27;t have implicitly resolved typeclasses without a static type system.<p>Yes, but that wasn&#x27;t the feature mentioned in the GP comment. He mentioned lazy evaluation, with currying, static typing and monads as a consequence. But if monads are just a consequence of the type system, then I understand what he meant.<p>&gt; but most of the value of explicitly sequencing relatively minor effects is only there if you have an extremely low-overhead way of doing so, and a system that can verify the correctness of that sequencing at compile time.<p>Well, extremely low-overhead of just about anything is certainly achievable with modern JITs[1].<p>&gt; and a system that can verify the correctness of that sequencing at compile time.<p>Why is that necessary? You might as well presuppose the necessity of types :) or, alternatively, say that you need a type system to verify that your monads are truly monads (i.e. obey the monad laws) at compile time, something Haskell doesn&#x27;t do, either.<p>[1]: <a href="https:&#x2F;&#x2F;twitter.com&#x2F;ChrisGSeaton&#x2F;status&#x2F;619885182104043520" rel="nofollow">https:&#x2F;&#x2F;twitter.com&#x2F;ChrisGSeaton&#x2F;status&#x2F;619885182104043520</a>