An advanced, purely functional programming language.
Every expression in Haskell has a type which is determined at compile time. All the types composed together by function application have to match up. If they don't, the program will be rejected by the compiler. Types become not only a form of guarantee, but a language for expressing the construction of programs.
primes = filterPrime [2..]
wherefilterPrime (p:xs) =
p : filterPrime [x | x <- xs, x `mod` p /= 0]