Concurrent Clean : for-notation : ガード

ガードを使った構文で

  | n <= 0 = return []

という感じのと

  | n > 0
     r <- next
     return [x:r]

というものの2通りの書き方を考えているのだけれど、どうしたものか。
2つ目のが必須なのは分かっていて、1つ目の1行で書くという書き方をサポートするかどうかということなのだけれど。

  | n <= 0
     return []

でもいいかなぁ。
あと、似たようなところで、caseとかどうするかな。

      • -

ただ、1つ目のは、

  | let f = (<=) in f n 0 = return []

みたいな書き方もできるんだよな。この辺ちゃんとやろうとすると結構面倒。

      • -

逆に2つ目は、2行に渡るような条件が書けない。まあ、それは、

  b =  n <= 0
    && n > 10
  | b
     return []

とか書けるけど。

  | (  n <= 0
    && n > 10 )
    return []

みたいに括弧をつけるということにしてもいいけど、そこまですることでもない気がする。

      • -

結局、1つ目の書き方をあきらめた。