Haskell
初期(Haskell 1.2)の仕様をベースとした、等式推論に向いた方言およびインタプリタの実装。当時の Haskell より Miranda に似た構文、標準の機能をいくつか満たさない、逆に標準にないいくつかの機能の追加、などの特徴があった。マーク・ジョーンズにより開発された。その役割の多くは Hugs に譲られた。Hugs の「g」は Gofer に由来する。
Haskell で順序付けられた複数の値を扱うのにもっとも柔軟で簡潔な方法はリストを用いることである。次は四季の名前のリストである。
次は初項10、公差4の等差数列のリストである。このリストは無限リストであり、その長さは無限大である。
次の式は先ほどの数列の先頭20項を要素に持つリストである。take n l はリスト l の先頭 n 個の項を要素に持つリストを返す関数である。
もし正格な動作を持つ言語でこのような定義をしようとすると関数 take に値を渡す前に無限リストを生成することになるが、長さが無限のため無限リストの生成が終わることはなく関数 take がいつまでも呼び出されなくなってしまう。Haskell は遅延評価されるため、このようなリストを定義しても必要になるまで必要な項の値の生成は遅延される。このように無限リストを扱えるのは Haskell の大きな強みである。次は素数列をリスト内包表記を用いて定義した一例である。
リストはその柔軟性から再帰的な関数での値の受け渡しに向いているが、任意の位置の要素にアクセスするためには参照を先頭からたどる必要があるのでランダムアクセスが遅い、要素を変更するたびにリストの一部を作り直さなければならないなどの欠点がある。このため Haskell にも配列が用意されており、高速な参照や更新が必要なプログラムではリストの代わりに配列を用いることでパフォーマンスを改善できる可能性がある。
Haskell 2010 は他のプログラミング言語とのバインディングを可能にする Foreign Function Interface(FFI)を Haskell に追加し, いくつかの構文上の問題を修正する(正式な構文を変更する)。「n + k パターン」と呼ばれる構文を削除し, fak (n+1) = (n+1) * fak nというような形式の定義はもはや許されない。Haskell に Haskell 2010 のソースかどうかや, いくつかの必要な拡張の指定を可能にする言語プラグマ構文拡張を導入する。Haskell 2010 に導入された拡張の名前は, DoAndIfThenElse, HierarchicalModules(階層化ライブラリ), EmptyDataDeclarations, FixityResolution, ForeignFunctionInterface, LineCommentSyntax, PatternGuards, RelaxedDependencyAnalysis, LanguagePragma, NoNPlusKPatterns である。