I highly doubt that you can prove correctness with types alone.
How would you verify the correctness of this function with types alone:
Integer add(Integer a, Integer b) { return a + b; }
How would types verify for me that the result is correct and not a+b+1?
Formal proofs work for this but to make them work you need more than just types.