Concurrent Clean : 型と演算子

型があるということは、プログラミングの上での制約になることもあるのだけれど、型のおかげでプログラミングの柔軟性が向上することもある。Cleanの演算子は1つの典型だ。
Cleanの演算子は、使える文字の種類に制限がない。なので、次のような演算子を定義することができる。

(startsWith) infix 9 :: !String !String -> Bool

でこれを使うことで、次のような式が書ける

trim str startsWith prefix

ただし、trimは次のような関数である。

trim :: !String -> !String

ここで、型によって、startsWithが演算子であることが分からなければ、上の式をパースして正しい構文木を作ることすらできない。この式は、次のように解釈される。

(startsWith) (trim str) prefix

つまりこの式は、strをtrimしてから、その先頭がprefixで始まるかどうかをテストしているのである。