Type systems can be nominal or structural, they might force an option type, and they might even encode side effects (IO or exceptions).
I think the biggest single improvement (where compiles≈correct) is exhaustiveness checking. This produces thoroughness and often robustness.