Haskell
haskell.org leads with four commitments and treats them as inseparable: purity (“every function in Haskell is a function in the mathematical sense”), immutability and referential transparency, lazy evaluation (“functions don’t evaluate their arguments”), and static typing with inference — every expression has a type fixed at compile time, and types are “inferred by unifying every type bidirectionally”, so the programmer writes few of them. Run by Haskell.org, Inc., a 501(c)(3) non-profit; GHC is the compiler; over 6,900 packages, with Yesod and Snap for web, Conduit and Pipes for streaming, QuickCheck and Hspec for testing. Twenty-plus companies give testimonials, HubSpot, IOHK, Mercury and NoRedInk among them, all citing reliability and maintainability rather than speed.
T1 — first-party. Standing caveat applies to “best-in-class support for async, concurrent and parallel programming”, which is a vendor’s superlative with no benchmark attached.
The first source here where the type system pays for the semantics
On type-system‘s scale — how much the types are asked to prove — Haskell sits with rust and above it in one respect. Purity means effects have to be visible in a type rather than allowed anywhere, so the type checker is enforcing a semantic property, not just classifying storage. It is also the corpus’s first source to describe inference as an algorithm (bidirectional unification), which type-system had recorded as an open gap since the page was written this morning.
The interesting comparison is with typescript, the day’s other type-first language. TypeScript infers types over code that already exists and deletes them before running. Haskell’s types decide what the code is allowed to mean. Same axis, opposite direction: describe versus constrain.
Laziness is the load-bearing choice
Non-strict evaluation is what lets control structures be ordinary functions and what makes the fusion optimizations the page credits for performance possible. See evaluation-strategy: prolog resolves, haskell defers, and everything else in the corpus evaluates arguments before the call without ever naming that as a decision.
Concurrency, and a shared answer with Clojure
GHC supplies lightweight threads over a parallel garbage collector, plus software transactional memory — the same mechanism clojure built its concurrency story on (concurrency-model). Two sources, two languages, one answer: make state change transactional and let immutability remove the rest of the problem. That is the first time any mechanism in this corpus appears twice, and it lands on the axis where the founding eight disagreed most.
Related
type-system · evaluation-strategy · concurrency-model · clojure · typescript · rust · programming-language · synthesis