Concurrent Clean : letとwhere,with

次の例は、(2)だけadd1が有効になる。whereをwithに置き換えても同じ。

k a = let
        a1 = add1 a  //(1)
        a2 = add1 a1 //(2)
        where add1 = (+) 1
      in
        add1 a2      //(3)

これは、(1),(2),(3)のすべてでadd1が有効になる。withをwhereに置き換えても同じ。

k a = let
        a1 = add1 a  //(1)
        a2 = add1 a1 //(2)
      in
        add1 a2      //(3)
        with add1 = (+) 1