dictionary passing

が一瞬わかったような、でもやっぱりわかるわけないか。全然知らないんだから。自動車学校は卒業できたことだし、ちゃんと勉強しなきゃ。

なぜ、突然Yが出てくるのか悩みましたが、パラメトライズしておかないとprint1の中でprint2を呼べないから困るのかな、と。

ところで、polymorphic variantは

# let g `A = `A;; 
- : [< `A ] -> [> `A ] = <fun>
# let f g = g `A;;
val f : ([> `A ] -> 'a) -> 'a = <fun>

などと、gの引数の型とfの引数のgの引数の型が同じでも良いような気がしますが、>と<がひっくり返ります。もちろんひっくり返る厳密なアルゴリズムはちょっと調べればすぐわかりますが、直感的にはいまいち理解できていなかったり。オブジェクトが< ρ1; .. >と< ρ1 >が勝手に変わったりしなくても大丈夫なのか、一瞬不安になったりしてしまいます。

これも、調べとかないと。