>My experience is that there's a correlation between powerful type systems and the property that once your program compiles, it's correct. Compiles == correct is rarely true in C or JavaScript. It's often true in Haskell and Rust.
I find this staggeringly hard to believe. Most bugs are logic errors. How does Rust or Haskell prevent these?