More expressive than earlier static type systems. Consider C or Pascal's type system, then consider C#/Java, then consider Rust's, then consider Haskell's. The amount of metaprogramming and reasoning about types and their properties gets increasingly more sophisticated, so the guarantees you can make also gets more and more comprehensive. Now you have sum types, product types, dynamic dispatch, generics, higher-kinded data types, and so on. C has `void *` and that's all you get.