Concurrent Clean : 遅延評価

遅延評価が思考を減らすことができるのって、次のようなプログラムなんかを見るとよく分かるのではないかと思います。

f s = let len = size s
          c0  = s.[0]
          c1  = s.[1]
          c2  = s.[2]
      in
          case len of
            0 = '\0'
            1 = c0
            2 = c1
            _ = c2

こんなプログラムを、普通のプログラミング言語で書いたらアホじゃないかと思うだろうと思います(配列アクセスの範囲チェックエラーになる)が、CleanやHaskellではごく普通だったりします。
この例だと微妙かもしれないですが、たとえば、

char c = lst[i];
if (i < lst.length && ! Character.isSpace(c)) {
  //cを使った処理
}

みたいなことを書きたくなったりしたとき、でも、これは範囲チェックエラーになるので、

char c;
if (i < lst.length && ! Character.isSpace(c = lst[i])) {
  //cを使った処理
}

みたいに書かなければならなくなって、キモーとか思わなくて済みます。