File "pr4018_bad.ml", line 42, characters 11-17: 42 | let f (x : entity entity_container) = () ^^^^^^ Error: This type "entity" = "< destroy_subject : id subject; entity_id : id >" should be an instance of type "< destroy_subject : < add_observer : 'a entity_container -> 'b; .. >; .. > as 'a" Type "id subject" = "< add_observer : (id subject, id) observer -> unit; notify_observers : id -> unit >" is not compatible with type "< add_observer : < destroy_subject : 'c; .. > entity_container -> 'b; .. > as 'c" Type "(id subject, id) observer" = "< notify : id subject -> id -> unit >" is not compatible with type "(< destroy_subject : < add_observer : 'd -> 'b; .. >; .. > as 'a) entity_container as 'd" = "< add_entity : 'a -> 'b; notify : 'a -> id -> unit >" The method "add_observer" has type "(id subject, id) observer -> unit", but the expected method type was "< destroy_subject : < add_observer : 'e; .. >; .. > entity_container -> 'b as 'e"