Haskell
純粋関数型である Haskell では getLine もやはり副作用はなく、getLine は一行読み込むという動作を表す値を常に返す。このように入出力の動作を表す値をアクションと呼ぶ。getLine が返すのは String そのものではなくあくまで IO String という型を持ったアクションであって、それを putStrLn の引数に与えることはできない。正しいエコープログラムの一例は次のようになる。
ここでは演算子 >>= によってふたつのアクションを連結している。このとき、main は一行読み込みそれを出力するというアクションとなり、このプログラムを実行すると処理系は main が持つアクションの内容を実行する。このアクションを実行すると、getLine は一行読み込み、それを putStrLn に渡す。このとき、読み込まれたデータにこれらのアクションの外側からアクセスすることはできない。このため、この式は参照透過性を保つことができる。
モナドは、Freeモナド、Operationalモナドと呼ばれる構造により、より単純なデータ型から導出することもできる。これにより、非常に強力な依存性の注入が実現できる。
Haskell は高階関数や静的多相型付け、定義可能な演算子、例外処理といった多くの言語で採用されている現代的な機能に加え、パターンマッチングやカリー化、リスト内包表記、ガードといった多くの特徴的な機能を持っている。また、遅延評価や再帰的な関数や代数的データ型もサポートしているほか、独自の概念として圏論のアイデアを利用し参照透過性を壊すことなく副作用のある操作(例えば 代入、入出力、配列など)を実現するモナドを含む。このような機能の組み合わせにより、手続き型プログラミング言語では記述が複雑になるような処理がしばしば簡潔になるばかりではなく、必要に応じて手続き型プログラミングを利用できる。
Haskell は関数型プログラミングの研究対象として人気が高い。あわせて Parallel Haskell と呼ばれるマサチューセッツ工科大学やグラスゴー大学によるものをはじめ、他にも Distributed Haskell や Eden といった分散バージョン、Eager Haskell と呼ばれる投機的実行バージョン、Haskell++ や O'Haskell、Mondrian といったオブジェクト指向バージョンも複数存在しているなど、いくつもの派生形が開発されてきている。
GUI開発向けサポートの新しい方法を提供する、Concurrent Clean と呼ばれる Haskell に似た言語もある。
Darcs(英語版) - 分散バージョン管理システム。
Monadius - グラディウス・クローンのシューティングゲーム。
Pandoc - Markdownなどを変換するドキュメント・コンバータ。
xmonad - X Window Systemのウィンドウマネージャ。
Yesod(英語版) - Webアプリケーションフレームワーク。
1999年2月、Haskell 98 言語標準は最初に The Haskell 98 Report として発表された。2003年1月、改定されたバージョンが Haskell 98 Language and Libraries: The Revised Report として発表された。GHC に代表されるように、Haskell は急速に発達しつづけている。