(* TEST setup-ocamlc.byte-build-env; flags = "-dlambda -dno-unique-ids"; ocamlc.byte; { flat-float-array; compiler_reference = "${test_source_directory}/module_coercion.compilers.flat.reference"; check-ocamlc.byte-output; }{ no-flat-float-array; compiler_reference = "${test_source_directory}/module_coercion.compilers.no-flat.reference"; check-ocamlc.byte-output; } *) module M = struct external len : 'a array -> int = "%array_length" external safe_get : 'a array -> int -> 'a = "%array_safe_get" external unsafe_get : 'a array -> int -> 'a = "%array_unsafe_get" external safe_set : 'a array -> int -> 'a -> unit = "%array_safe_set" external unsafe_set : 'a array -> int -> 'a -> unit = "%array_unsafe_set" external cmp : 'a -> 'a -> int = "%compare";; external eq : 'a -> 'a -> bool = "%equal";; external ne : 'a -> 'a -> bool = "%notequal";; external lt : 'a -> 'a -> bool = "%lessthan";; external gt : 'a -> 'a -> bool = "%greaterthan";; external le : 'a -> 'a -> bool = "%lessequal";; external ge : 'a -> 'a -> bool = "%greaterequal";; end;; module type T = sig type t val len : t array -> int val safe_get : t array -> int -> t val unsafe_get : t array -> int -> t val safe_set : t array -> int -> t -> unit val unsafe_set : t array -> int -> t -> unit val cmp : t -> t -> int val eq : t -> t -> bool val ne : t -> t -> bool val lt : t -> t -> bool val gt : t -> t -> bool val le : t -> t -> bool val ge : t -> t -> bool end;; module M_int : T with type t := int = M;; module M_float : T with type t := float = M;; module M_string : T with type t := string = M;; module M_int32 : T with type t := int32 = M;; module M_int64 : T with type t := int64 = M;; module M_nativeint : T with type t := nativeint = M;;