sig
  module type T = sig type t end
  module type T_bin =
    sig
      type t
      val bin_t :
        Versioned_typed_tcp.Datumable_of_binable.T_bin.t
        Core.Std.Bin_prot.Type_class.t
      val bin_read_t :
        Versioned_typed_tcp.Datumable_of_binable.T_bin.t
        Core.Std.Bin_prot.Read_ml.reader
      val bin_read_t_ :
        Versioned_typed_tcp.Datumable_of_binable.T_bin.t
        Core.Std.Bin_prot.Unsafe_read_c.reader
      val bin_read_t__ :
        (int -> Versioned_typed_tcp.Datumable_of_binable.T_bin.t)
        Core.Std.Bin_prot.Unsafe_read_c.reader
      val bin_reader_t :
        Versioned_typed_tcp.Datumable_of_binable.T_bin.t
        Core.Std.Bin_prot.Type_class.reader
      val bin_size_t :
        Versioned_typed_tcp.Datumable_of_binable.T_bin.t
        Core.Std.Bin_prot.Size.sizer
      val bin_write_t :
        Versioned_typed_tcp.Datumable_of_binable.T_bin.t
        Core.Std.Bin_prot.Write_ml.writer
      val bin_write_t_ :
        Versioned_typed_tcp.Datumable_of_binable.T_bin.t
        Core.Std.Bin_prot.Unsafe_write_c.writer
      val bin_writer_t :
        Versioned_typed_tcp.Datumable_of_binable.T_bin.t
        Core.Std.Bin_prot.Type_class.writer
    end
  module V :
    functor (V : T->
      functor (T : T->
        sig
          module type S =
            sig
              val of_v :
                V.t -> Versioned_typed_tcp.Datumable_of_binable.T.t option
              val to_v :
                Versioned_typed_tcp.Datumable_of_binable.T.t -> V.t option
            end
        end
  module Make_datumable5 :
    functor (Versions : Versions->
      functor (T : T->
        functor (V1 : T_bin->
          functor (V2 : T_bin->
            functor (V3 : T_bin->
              functor (V4 : T_bin->
                functor (V5 : T_bin->
                  functor (V1_cvt : V(V1)(T).S->
                    functor (V2_cvt : V(V2)(T).S->
                      functor (V3_cvt : V(V3)(T).S->
                        functor (V4_cvt : V(V4)(T).S->
                          functor (V5_cvt : V(V5)(T).S->
                            sig
                              type datum = T.t
                              val low_version : Version.t
                              val prod_version : Version.t
                              val test_version : Version.t
                              val lookup_marshal_fun :
                                Version.t ->
                                (datum marshal_fun, exn) Core.Std.Result.t
                              val lookup_unmarshal_fun :
                                Version.t ->
                                (datum unmarshal_fun, exn) Core.Std.Result.t
                            end
  module type Pre_versions =
    sig
      val low_version : Versioned_typed_tcp.Version.t
      val prod_version : Versioned_typed_tcp.Version.t
    end
  module Five_versions :
    functor (Versions : Pre_versions->
      functor (T : T->
        functor (V1 : T_bin->
          functor (V2 : T_bin->
            functor (V3 : T_bin->
              functor (V4 : T_bin->
                functor (V5 : T_bin->
                  functor (V1_cvt : V(V1)(T).S->
                    functor (V2_cvt : V(V2)(T).S->
                      functor (V3_cvt : V(V3)(T).S->
                        functor (V4_cvt : V(V4)(T).S->
                          functor (V5_cvt : V(V5)(T).S->
                            sig
                              type datum = T.t
                              val low_version : Version.t
                              val prod_version : Version.t
                              val test_version : Version.t
                              val lookup_marshal_fun :
                                Version.t ->
                                (datum marshal_fun, exn) Core.Std.Result.t
                              val lookup_unmarshal_fun :
                                Version.t ->
                                (datum unmarshal_fun, exn) Core.Std.Result.t
                            end
  module Four_versions :
    functor (Versions : Pre_versions->
      functor (T : T->
        functor (V1 : T_bin->
          functor (V2 : T_bin->
            functor (V3 : T_bin->
              functor (V4 : T_bin->
                functor (V1_cvt : V(V1)(T).S->
                  functor (V2_cvt : V(V2)(T).S->
                    functor (V3_cvt : V(V3)(T).S->
                      functor (V4_cvt : V(V4)(T).S->
                        sig
                          type datum = T.t
                          val low_version : Version.t
                          val prod_version : Version.t
                          val test_version : Version.t
                          val lookup_marshal_fun :
                            Version.t ->
                            (datum marshal_fun, exn) Core.Std.Result.t
                          val lookup_unmarshal_fun :
                            Version.t ->
                            (datum unmarshal_fun, exn) Core.Std.Result.t
                        end
  module Three_versions :
    functor (Versions : Pre_versions->
      functor (T : T->
        functor (V1 : T_bin->
          functor (V2 : T_bin->
            functor (V3 : T_bin->
              functor (V1_cvt : V(V1)(T).S->
                functor (V2_cvt : V(V2)(T).S->
                  functor (V3_cvt : V(V3)(T).S->
                    sig
                      type datum = T.t
                      val low_version : Version.t
                      val prod_version : Version.t
                      val test_version : Version.t
                      val lookup_marshal_fun :
                        Version.t ->
                        (datum marshal_fun, exn) Core.Std.Result.t
                      val lookup_unmarshal_fun :
                        Version.t ->
                        (datum unmarshal_fun, exn) Core.Std.Result.t
                    end
  module Two_versions :
    functor (Versions : Pre_versions->
      functor (T : T->
        functor (V1 : T_bin->
          functor (V2 : T_bin->
            functor (V1_cvt : V(V1)(T).S->
              functor (V2_cvt : V(V2)(T).S->
                sig
                  type datum = T.t
                  val low_version : Version.t
                  val prod_version : Version.t
                  val test_version : Version.t
                  val lookup_marshal_fun :
                    Version.t -> (datum marshal_fun, exn) Core.Std.Result.t
                  val lookup_unmarshal_fun :
                    Version.t -> (datum unmarshal_fun, exn) Core.Std.Result.t
                end
  module One_version :
    functor (Versions : Pre_versions->
      functor (T : T->
        functor (V1 : T_bin->
          functor (V1_cvt : V(V1)(T).S->
            sig
              type datum = T.t
              val low_version : Version.t
              val prod_version : Version.t
              val test_version : Version.t
              val lookup_marshal_fun :
                Version.t -> (datum marshal_fun, exn) Core.Std.Result.t
              val lookup_unmarshal_fun :
                Version.t -> (datum unmarshal_fun, exn) Core.Std.Result.t
            end
end