self quiz
なぜ、このプログラムは型エラーになりますか?
# class c = object (self) method f = (new d)#f self end and d = object method f : c -> unit = fun x -> () end;; This expression has type < f : 'a; .. > but is here used with type 'b Self type cannot escape its class
selfの型は< f : unit; .. > (= #c)で、d#fの引数の型はc。このとき、#cとcは単一化はできるけれども、selfの型は常に拡張可能でなくてはいけない(継承があるから)ので、#c → cの代入はできない。
単一化できずに型エラーになっているのではなく、単一化のあとの代入(?)でエラーになっているのだと思う。よく見るとエラーメッセージもいつものと違うし。
やっと理解できたぞ。