付かない!
すみません。またうそつきました。
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
確かに付かない。
あれ?…
混乱してます。年が明けたら、まず確認してみます。