Types

Static typing provides a way to find errors in advance. Expressions that cannot be assigned a type are considered erroneous, and are rejected by the compiler.

Haskell also allows the programmer to define new types.

While a program which passes type checks is more likely to be correct, it is not a guarantee of logical correctness.