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: functor (
V
:
T
) ->
functor (
T
:
T
) ->
sig
.. end
module Make_datumable5: functor (
Versions
:
Versioned_typed_tcp.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
.. end
module type Pre_versions = sig
.. 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
) ->
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: 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
) ->
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: 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
) ->
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: 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
) ->
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: functor (
Versions
:
Pre_versions
) ->
functor (
T
:
T
) ->
functor (
V1
:
T_bin
) ->
functor (
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
)