Types to Guide Language Design
Elegance and uniformity
Static verifiability
Orthogonality to other constructs
Conservative extension property
Consistency across module boundaries
Some measure of  language independence
Reasoning about programs