匿名抽象型の話だけどOCamlはそれっぽい表現ができるみたいだね

let use_object
(x : < print : unit -> unit;
name : string;
reset : int -> unit >) =
print_endline x#name;
x#print ();

xは指定されたprint, name, resetメソッドを持つ必要がある
resetは実際使われてないが持ってないとコンパイルエラー