Module Project.Datatype


module Datatype: sig .. end
Datatype implementation and how to register them.

module type INPUT = sig .. end
module type S = sig .. end
Output of Project.Datatype.Register.
module Register: 
functor (Datatype : INPUT) -> S with type t = Datatype.t
Register a new kind of datatype by side-effects.
module Imperative: 
functor (X : sig
type t 
val copy : t -> t
val name : string
end) -> S with type t = X.t
Register a single datatype, not affected by hashconsing.
module Persistent: 
functor (X : sig
type t 
val name : string
end) -> S with type t = X.t
Register a single datatype, not affected by hashconsing and copying.
module Own: S  with type t = project

Create a name from predefined ones

See module Namespace.

val extend_name : string -> string -> string
val extend_name2 : string -> string -> string -> string
val extend_name3 : string -> string -> string -> string -> string