module Datumable_of_binable: sig
.. end
Helpers to make your types Datumable if they are binable. Works with up
to 5 versions (easily extensible to more)
module type T = sig
.. end
module type T_bin = sig
.. end
module V (
V
:
T
)
(
T
:
T
)
: sig
.. end
module Make_datumable5 (
Versions
:
Versioned_typed_tcp.Versions
)
(
T
:
T
)
(
V1
:
T_bin
)
(
V2
:
T_bin
)
(
V3
:
T_bin
)
(
V4
:
T_bin
)
(
V5
:
T_bin
)
(
V1_cvt
:
V(V1)(T).S
)
(
V2_cvt
:
V(V2)(T).S
)
(
V3_cvt
:
V(V3)(T).S
)
(
V4_cvt
:
V(V4)(T).S
)
(
V5_cvt
:
V(V5)(T).S
)
: sig
.. end
module type Pre_versions = sig
.. end
module Five_versions (
Versions
:
Pre_versions
)
(
T
:
T
)
(
V1
:
T_bin
)
(
V2
:
T_bin
)
(
V3
:
T_bin
)
(
V4
:
T_bin
)
(
V5
:
T_bin
)
(
V1_cvt
:
V(V1)(T).S
)
(
V2_cvt
:
V(V2)(T).S
)
(
V3_cvt
:
V(V3)(T).S
)
(
V4_cvt
:
V(V4)(T).S
)
(
V5_cvt
:
V(V5)(T).S
)
: Make_datumable5
(
sig
include Versions
val test_version : Versioned_typed_tcp.Version.t
end
)
(
T
)
(
V1
)
(
V2
)
(
V3
)
(
V4
)
(
V5
)
(
V1_cvt
)
(
V2_cvt
)
(
V3_cvt
)
(
V4_cvt
)
(
V5_cvt
)
module Four_versions (
Versions
:
Pre_versions
)
(
T
:
T
)
(
V1
:
T_bin
)
(
V2
:
T_bin
)
(
V3
:
T_bin
)
(
V4
:
T_bin
)
(
V1_cvt
:
V(V1)(T).S
)
(
V2_cvt
:
V(V2)(T).S
)
(
V3_cvt
:
V(V3)(T).S
)
(
V4_cvt
:
V(V4)(T).S
)
: Make_datumable5
(
sig
include Versions
val test_version : Versioned_typed_tcp.Version.t
end
)
(
T
)
(
V1
)
(
V2
)
(
V3
)
(
V4
)
(
V4
)
(
V1_cvt
)
(
V2_cvt
)
(
V3_cvt
)
(
V4_cvt
)
(
V4_cvt
)
module Three_versions (
Versions
:
Pre_versions
)
(
T
:
T
)
(
V1
:
T_bin
)
(
V2
:
T_bin
)
(
V3
:
T_bin
)
(
V1_cvt
:
V(V1)(T).S
)
(
V2_cvt
:
V(V2)(T).S
)
(
V3_cvt
:
V(V3)(T).S
)
: Make_datumable5
(
sig
include Versions
val test_version : Versioned_typed_tcp.Version.t
end
)
(
T
)
(
V1
)
(
V2
)
(
V3
)
(
V3
)
(
V3
)
(
V1_cvt
)
(
V2_cvt
)
(
V3_cvt
)
(
V3_cvt
)
(
V3_cvt
)
module Two_versions (
Versions
:
Pre_versions
)
(
T
:
T
)
(
V1
:
T_bin
)
(
V2
:
T_bin
)
(
V1_cvt
:
V(V1)(T).S
)
(
V2_cvt
:
V(V2)(T).S
)
: Make_datumable5
(
sig
include Versions
val test_version : Versioned_typed_tcp.Version.t
end
)
(
T
)
(
V1
)
(
V2
)
(
V2
)
(
V2
)
(
V2
)
(
V1_cvt
)
(
V2_cvt
)
(
V2_cvt
)
(
V2_cvt
)
(
V2_cvt
)
module One_version (
Versions
:
Pre_versions
)
(
T
:
T
)
(
V1
:
T_bin
)
(
V1_cvt
:
V(V1)(T).S
)
: Make_datumable5
(
sig
include Versions
val test_version : Versioned_typed_tcp.Version.t
end
)
(
T
)
(
V1
)
(
V1
)
(
V1
)
(
V1
)
(
V1
)
(
V1_cvt
)
(
V1_cvt
)
(
V1_cvt
)
(
V1_cvt
)
(
V1_cvt
)