Haskell: correctness the compiler can prove
Haskell is a purely functional language with a type system that
catches whole classes of bugs before the program starts. A function
cannot quietly reach into the outside world, a missing case in a
pattern match is a warning, and a value that may be absent has a
type that says so.
The language dates from 1990 and shaped what later languages borrow:
type classes, immutable data, lazy evaluation, and the do notation
that hides sequencing behind a readable block.
Start the full course here:
Haskell course: zero to hero in 50 lessons
A background in any strict language helps, see
Development for the neighbouring courses.