sig
  module type Key =
    sig
      type t
      type floatable = t
      val of_float : float -> floatable
      val to_float : floatable -> float
      type sexpable = t
      val sexp_of_t : sexpable -> Sexplib.Sexp.t
      val t_of_sexp : Sexplib.Sexp.t -> sexpable
      type binable = t
      val bin_size_t : binable Bin_prot.Size.sizer
      val bin_write_t : binable Bin_prot.Map_to_safe.writer
      val bin_write_t_ : binable Bin_prot.Unsafe_write_c.writer
      val bin_read_t : binable Bin_prot.Read_ml.reader
      val bin_read_t_ : binable Bin_prot.Unsafe_read_c.reader
      val bin_read_t__ : (int -> binable) Bin_prot.Unsafe_read_c.reader
      val bin_writer_t : binable Bin_prot.Type_class.writer
      val bin_reader_t : binable Bin_prot.Type_class.reader
      val bin_t : binable Bin_prot.Type_class.t
    end
  module type S =
    sig
      type key
      type t
      type sexpable = t
      val sexp_of_t : sexpable -> Sexplib.Sexp.t
      val t_of_sexp : Sexplib.Sexp.t -> sexpable
      type binable = t
      val bin_size_t : binable Bin_prot.Size.sizer
      val bin_write_t : binable Bin_prot.Map_to_safe.writer
      val bin_write_t_ : binable Bin_prot.Unsafe_write_c.writer
      val bin_read_t : binable Bin_prot.Read_ml.reader
      val bin_read_t_ : binable Bin_prot.Unsafe_read_c.reader
      val bin_read_t__ : (int -> binable) Bin_prot.Unsafe_read_c.reader
      val bin_writer_t : binable Bin_prot.Type_class.writer
      val bin_reader_t : binable Bin_prot.Type_class.reader
      val bin_t : binable Bin_prot.Type_class.t
      val create :
        (Piecewise_linear.S.key * float) list ->
        (Piecewise_linear.S.t, string) Result.t
      val get : Piecewise_linear.S.t -> Piecewise_linear.S.key -> float
    end
  module Make :
    functor (Key : Key->
      sig
        type key = Key.t
        type t
        type sexpable = t
        val sexp_of_t : sexpable -> Sexplib.Sexp.t
        val t_of_sexp : Sexplib.Sexp.t -> sexpable
        type binable = t
        val bin_size_t : binable Bin_prot.Size.sizer
        val bin_write_t : binable Bin_prot.Map_to_safe.writer
        val bin_write_t_ : binable Bin_prot.Unsafe_write_c.writer
        val bin_read_t : binable Bin_prot.Read_ml.reader
        val bin_read_t_ : binable Bin_prot.Unsafe_read_c.reader
        val bin_read_t__ : (int -> binable) Bin_prot.Unsafe_read_c.reader
        val bin_writer_t : binable Bin_prot.Type_class.writer
        val bin_reader_t : binable Bin_prot.Type_class.reader
        val bin_t : binable Bin_prot.Type_class.t
        val create : (key * float) list -> (t, string) Result.t
        val get : t -> key -> float
      end
  module Time :
    sig
      type key = Time.t
      type t
      type sexpable = t
      val sexp_of_t : sexpable -> Sexplib.Sexp.t
      val t_of_sexp : Sexplib.Sexp.t -> sexpable
      type binable = t
      val bin_size_t : binable Bin_prot.Size.sizer
      val bin_write_t : binable Bin_prot.Map_to_safe.writer
      val bin_write_t_ : binable Bin_prot.Unsafe_write_c.writer
      val bin_read_t : binable Bin_prot.Read_ml.reader
      val bin_read_t_ : binable Bin_prot.Unsafe_read_c.reader
      val bin_read_t__ : (int -> binable) Bin_prot.Unsafe_read_c.reader
      val bin_writer_t : binable Bin_prot.Type_class.writer
      val bin_reader_t : binable Bin_prot.Type_class.reader
      val bin_t : binable Bin_prot.Type_class.t
      val create : (key * float) list -> (t, string) Result.t
      val get : t -> key -> float
    end
  module Float :
    sig
      type key = float
      type t
      type sexpable = t
      val sexp_of_t : sexpable -> Sexplib.Sexp.t
      val t_of_sexp : Sexplib.Sexp.t -> sexpable
      type binable = t
      val bin_size_t : binable Bin_prot.Size.sizer
      val bin_write_t : binable Bin_prot.Map_to_safe.writer
      val bin_write_t_ : binable Bin_prot.Unsafe_write_c.writer
      val bin_read_t : binable Bin_prot.Read_ml.reader
      val bin_read_t_ : binable Bin_prot.Unsafe_read_c.reader
      val bin_read_t__ : (int -> binable) Bin_prot.Unsafe_read_c.reader
      val bin_writer_t : binable Bin_prot.Type_class.writer
      val bin_reader_t : binable Bin_prot.Type_class.reader
      val bin_t : binable Bin_prot.Type_class.t
      val create : (key * float) list -> (t, string) Result.t
      val get : t -> key -> float
    end
  module Int :
    sig
      type key = int
      type t
      type sexpable = t
      val sexp_of_t : sexpable -> Sexplib.Sexp.t
      val t_of_sexp : Sexplib.Sexp.t -> sexpable
      type binable = t
      val bin_size_t : binable Bin_prot.Size.sizer
      val bin_write_t : binable Bin_prot.Map_to_safe.writer
      val bin_write_t_ : binable Bin_prot.Unsafe_write_c.writer
      val bin_read_t : binable Bin_prot.Read_ml.reader
      val bin_read_t_ : binable Bin_prot.Unsafe_read_c.reader
      val bin_read_t__ : (int -> binable) Bin_prot.Unsafe_read_c.reader
      val bin_writer_t : binable Bin_prot.Type_class.writer
      val bin_reader_t : binable Bin_prot.Type_class.reader
      val bin_t : binable Bin_prot.Type_class.t
      val create : (key * float) list -> (t, string) Result.t
      val get : t -> key -> float
    end
end