バイナリメソッドのある継承される事を想定した基底クラスが自身の型のリストを持っている時に、そのクラスを継承したクラスがサブタイピングで複数の異なる型の継承クラスを基底クラスのリストにアペンドする例。
言葉にすると訳分からんね。
class virtual ['me] sprite = object ( self ) val cs : 'me sprite list = [] method add_children c = {< cs = c :: cs >} method children = cs method virtual show : unit method print = self#show; List.iter (fun c -> c#show) cs end class msg m = object ( self:'me ) inherit ['me] sprite val m : string = m method show = print_string m end class num i = object ( self:'me ) inherit ['me] sprite val i : int = i method show = print_int i; print_newline() end let _ = let a = new msg "a\n" in let b = new msg "b\n" in let n = new num 1 in let comp = ( a # add_children ( b :> msg sprite ) ) # add_children ( n :> num sprite ) in comp#print