(* We play with Map. *)

module Comparison (* : Map.OrderedType  *)= struct
  type t = float;;
  let inject (f : float) : t = f;;
  let compare x y =
    if x < y then
      -1
    else if x = y then
      0
    else
      1;;
end;;

module FloatMap = Map.Make (Comparison);;

(* An empty map from floats to strings *)
let m : string FloatMap.t = FloatMap.empty;;

let m2 = FloatMap.add (Comparison.inject 1.4) "boo" m;; (* m is not destroyed or affected by this! *)
