Functor Datatype.Function

module Function: 
functor (T1 : sig
include Datatype.S
val label : (string * (unit -> Datatype.t) option) option
end-> 
functor (T2 : S-> S with type t = T1.t -> T2.t
Parameters:
T1 : sig include S val label: (string * (unit -> t) option) option end
T2 : S

include Datatype.S_no_copy
val copy : Datatype.t -> Datatype.t

Deep copy: no possible sharing between x and copy x.