A set of rules and constraints that governs the assignment, usage, and manipulation of data types within a programming language, ensuring type safety and enabling static analysis and optimization by compilers and tools.
"The type system of Haskell allows for powerful type inference and guarantees about program behavior."