sig   val self : State.t   val name : string   val mark_as_computed : ?project:Project.t -> unit -> unit   val is_computed : ?project:Project.t -> unit -> bool   module Datatype :     sig       type t = Project.Datatype.t Result_pair.Hashtbl.t       val ty : t Type.t       val name : string       val descr : t Descr.t       val packed_descr : Structural_descr.pack       val reprs : t list       val equal : t -> t -> bool       val compare : t -> t -> int       val hash : t -> int       val pretty_code : Format.formatter -> t -> unit       val internal_pretty_code :         Type.precedence -> Format.formatter -> t -> unit       val pretty : Format.formatter -> t -> unit       val varname : t -> string       val mem_project : (Project_skeleton.t -> bool) -> t -> bool       val copy : t -> t     end   val add_hook_on_update : (Datatype.t -> unit) -> unit   val howto_marshal : (Datatype.t -> 'a) -> ('-> Datatype.t) -> unit   type key = Result_pair.Hashtbl.key   type data = Project.Datatype.t   val replace : key -> data -> unit   val add : key -> data -> unit   val clear : unit -> unit   val length : unit -> int   val iter : (key -> data -> unit) -> unit   val iter_sorted : ?cmp:(key -> key -> int) -> (key -> data -> unit) -> unit   val fold : (key -> data -> '-> 'a) -> '-> 'a   val fold_sorted :     ?cmp:(key -> key -> int) -> (key -> data -> '-> 'a) -> '-> 'a   val memo : ?change:(data -> data) -> (key -> data) -> key -> data   val find : key -> data   val find_all : key -> data list   val mem : key -> bool   val remove : key -> unit end