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