付かない!

すみません。またうそつきました。

http://d.hatena.ne.jp/yoriyuki/20051226#p2

それはそうと、OCamlのオブジェクト型とレコード多相との違いが良く分からないのですが、どなたか簡潔に説明していただけたりしないかな、と。他力本願ですが。

とyoriyukiさん。そこで

多相レコード型では [ {name=”foo”, age=12}; {name=”bar”, weight=13} ] みたいなリストを型付けできません。レコード型{F}と{G}があったときに、dom(F)=dom(G)でないと単一化できないことになっています。

と答えたのですが、

[ {name=”foo”, age=12}; {name=”bar”, weight=13} ] はOCamlのオブジェクト型でも型が付かないと思いますけど。(混乱)

とのこと。

ウソぉ???と思ったら、

$ ocaml
        Objective Caml version 3.09.0

# let x = object
    method name="foo"
    method age=23
  end;;
val x : < age : int; name : string > = <obj>
# let y = object
    method name = "bar"
    method weight = 13
  end;;
val y : < name : string; weight : int > = <obj>
# [x;y];;
This expression has type < name : string; weight : int >
but is here used with type < age : int; name : string >
Only the first object type has a method weight

確かに付かない。

あれ?…

混乱してます。年が明けたら、まず確認してみます。