頭の悪いrec

こないだ、rec付けた時に仕方がないから()を……ってやってましたが、lazyでいいことが判明。lazyのほうが2回目以降の評価がいらないので確実にいいですね。

# let rec a = 1 and b = a;;
Characters 22-23:
  let rec a = 1 and b = a;;
                        ^
This kind of expression is not allowed as right-hand side of `let rec'
# let rec a = 1 and b () = a;;
val a : int = 1
val b : unit -> int = <fun>
# let rec a = 1 and b = lazy a;;
val a : int = 1
val b : int lazy_t = <lazy>

これでまたパーサライブラリ書き直し……次々と新テクニック(←私にとっての)が出てきて一向に進まないorz
賢い人なら全部お見通しなんだろーなー。
ちなみにこのgoogle:This kind of expression is not allowed as right-hand side of `let rec'は、OCamlの不親切極まりないエラーメッセージの象徴?の様子。