Haskell
parsec は Haskell で書かれたパーサコンビネータである。パーサの一種であるがコンパイラコンパイラとは異なり、Parsec はパーサのソースコードを出力するのではなく、純粋に Haskell の関数としてパーサを構成する。yacc のようにプログラミング言語と異なる言語を新たに習得する必要がなく、高速でかつ堅牢で、型安全で、演算子の結合性や優先順位を考慮したパーサを自動的に構成したり、動的にパーサを変更することすらできる。
派生として、大幅に高速なパースが可能なattoparsec、高機能でより洗練されたtrifectaがある。
そのほか、特殊な表記を持つ型としてリストとタプル、文字列がある。リストは Haskell で極めて頻繁に用いられるため、特別な構文が用意されている。リストは要素の型を角括弧で囲む。次は Char(文字)のリストを束縛する変数 text の定義である。文字のリストは文字列と等価である。2行目にあるように、文字列は殆どのプログラミング言語と同じように二重引用符で囲む。コメントにHaskellでのリストの表記を添えた。最後にデシュガー(糖衣構文を元の表記に戻すこと)したリストの表記法を示した。textもhelloも等価である。
タプルは要素の型をカンマで区切り、括弧で囲む。次は Float(浮動小数点数)の値をもつ2次元座標のタプルが束縛される変数 point の定義である。
タプルは2以上ならいくつでも要素を持つことができる。1要素のタプルは優先順位の括弧と表記が衝突し、また用途がないので存在しない。要素数がゼロのタプルは特に「ユニット」(Unit) と呼ばれ、有効な値を持たないなどの時に使われる。
type キーワードを用いて、型に別名をつけることができる。次は [Char] に String という別名をつけている。
Haskellの型は型構築子(型コンストラクタ、type constructor)から構築される。型構築子Tに型変数(Type variables)v1 v2 vNを与え型式(type expression)T v1 v2 vNとして評価することで型が構築される。型構築子の例には以下が挙げられる。
例えば型構築子Maybeに型変数Intを渡し、Maybe Intとすることで型が構築される。