パッチ置いといた

パッチはここよ。
リリース段階でも何でもないので。期待しないほうが良いです。コンパイルの仕方は

  • 慣れ
  • 根性

コンパイルできた場合は今までのエントリと gcamltests/*.ml から推測してみて下さい。うまく動かない場合は、おかしいなー、などと思わずに、即座に

  • バグ
  • 未実装
  • 未考慮

の内一つなのだろうとあきらめる事が吉。
さあ牛だ!、じゃなくて、さあ明日は仕事だ!おやすみなさい。

追記: 現時点でのぬるーい overload resolution

$:P2.name P1.t -> という型の時、

  • P1.t の実装が signature で隠されていて、 "t" という名前
  • モジュール P1 に P2.name という P2.name t の型を持つ値がある場合

に発生します。例えば、

module M = sig
  type 'a t
  val int : int t
  val float : float t
end = struct
  type 'a t = 'a -> 'a -> 'a
  let int : int t = (+)
  let float : float t = (+.)
end

こんな時。'a t が 'a -> 'a -> 'a である事を利用するには 'a t の実装を知ってないといけないので、let plus : $:'a t -> 'a -> 'a -> 'a = fun $:d -> d という定義は M の中で定義されなければいけなくなります。
この辺は 30分で実装したから堪忍してください。