> the only difference is that Haskell annotates effects with its type system.
I kind of disagree. Haskell doesn't only annotate effects with its type system. Haskell goes much further than that. It encourages an explicit and clear split between purely-function code and side effects.
But what do I know? Despite reading about it a lot, I've never written any Haskell ;)
Haskell does [partial?] type erasure, so RTS often knows nothing about types, it can't distinguish a pure function from any other one. The type consistence and runtime correctness is assured by the typechecker at compile time.
I kind of disagree. Haskell doesn't only annotate effects with its type system. Haskell goes much further than that. It encourages an explicit and clear split between purely-function code and side effects.
But what do I know? Despite reading about it a lot, I've never written any Haskell ;)