- : unit = () type 'b class_name = .. constraint 'b = < cast : 'a. 'a name -> 'a; .. > and 'a name = Class : 'a class_name -> (< cast : 'a0. 'a0 name -> 'a0; .. > as 'a) name exception Bad_cast class type castable = object method cast : 'a name -> 'a end class type foo_t = object method cast : 'a name -> 'a method foo : string end type 'b class_name += Foo : foo_t class_name class foo : foo_t class type bar_t = object method bar : string method cast : 'a name -> 'a method foo : string end type 'b class_name += Bar : bar_t class_name class bar : bar_t val clist : castable list ref = {contents = []} val push_castable : #castable -> unit = val pop_castable : unit -> castable = - : unit = () - : unit = () - : unit = () val c1 : castable = val c2 : castable = val c3 : castable = val f1 : foo = val f2 : foo = val f3 : foo = Exception: Bad_cast. val b2 : bar = Exception: Bad_cast.