rangeのための略記法

30分プログラム、その223。rangeのための略記法をCamlp4で作ってみた。
1..3とrange 1 3を同じにしたかったのだけれど、(1 .. 3)にしないとできなかった。なにか解決法あるのかなぁ。

使い方

let (@@) f g = f g

(* rangeをここで定義する必要がある *)
let rec range a b = 
  if a < b then
    a::(range (a+1) b)
  else 
    [] 

let sum xs = List.fold_left (+) 0 xs

let _ = 
  print_int @@ sum (0 .. 10);
  print_newline ()

ソースコード

open Pcaml

EXTEND
expr: LEVEL "expr1"
[[ e1 = expr; ".."; e2 = expr -> <:expr< range $e1$ $e2$>> ]];
END;;