sig
  type id = Ent.id
  type entity = Comp.entity
  val new_entity : unit -> CEnt.entity
  val get_id : CEnt.entity -> CEnt.id
  val get_id_opt : CEnt.entity -> CEnt.id option
  val has_component : CEnt.entity -> Comp.component_type -> bool
  val has_components : CEnt.entity -> Comp.component_type list -> bool
  val has_any_component : CEnt.entity -> Comp.component_type list -> bool
  val iter_components :
    CEnt.entity -> (Comp.component_type -> Comp.component -> unit) -> unit
  val get_components : CEnt.entity -> Comp.component_type list
  val cmp_components : CEnt.entity -> Comp.component_type list -> int
  val components_match : CEnt.entity -> Comp.component_type list -> bool
  type ('delta, 'fld) world = ('delta, 'fld) Comp.world
  val new_world : unit -> ('a, 'b) CEnt.world
  val add_entity : ('a, 'b) CEnt.world -> CEnt.entity -> ('a, 'b) CEnt.world
  val add_entities :
    ('a, 'b) CEnt.world -> CEnt.entity list -> ('a, 'b) CEnt.world
  val add_entity_id :
    ('a, 'b) CEnt.world -> CEnt.entity -> ('a, 'b) CEnt.world * CEnt.id
  val add_entities_id :
    ('a, 'b) CEnt.world ->
    CEnt.entity list -> ('a, 'b) CEnt.world * CEnt.id list
  val add_entities_init :
    w:('a, 'b) CEnt.world ->
    n:int -> f:(int -> CEnt.entity) -> ('a, 'b) CEnt.world
  val add_entities_ar :
    ('a, 'b) CEnt.world -> CEnt.entity array -> ('a, 'b) CEnt.world
  val add_entities_id_ar :
    ('a, 'b) CEnt.world ->
    CEnt.entity array -> ('a, 'b) CEnt.world * CEnt.id array
  val has_entity : ('a, 'b) CEnt.world -> CEnt.id -> bool
  val replace_entity :
    ('a, 'b) CEnt.world -> CEnt.id -> CEnt.entity -> ('a, 'b) CEnt.world
  val remove_entity :
    ('a, 'b) CEnt.world -> CEnt.entity -> ('a, 'b) CEnt.world
  val remove_entity_id :
    ('a, 'b) CEnt.world -> CEnt.id -> ('a, 'b) CEnt.world
  val get_entity : ('a, 'b) CEnt.world -> CEnt.id -> CEnt.entity
  val get_entity_opt : ('a, 'b) CEnt.world -> CEnt.id -> CEnt.entity option
  val get_entities : ('a, 'b) CEnt.world -> CEnt.id list -> CEnt.entity list
  val do_get_entities :
    ('a, 'b) CEnt.world -> CEnt.id list -> CEnt.entity list
  val get_entities_with_components :
    ('a, 'b) CEnt.world -> Comp.component_type list -> CEnt.entity list
  type system_label = Ent.system_label
  val world_step :
    ('delta, unit) CEnt.world ->
    ?labels:CEnt.system_label list -> 'delta -> ('delta, unit) CEnt.world
  val world_step_fold :
    ('delta, 'fld) CEnt.world ->
    ?labels:CEnt.system_label list ->
    'delta -> 'fld -> ('delta, 'fld) CEnt.world * 'fld
  val iter_entities : (CEnt.entity -> unit) -> ('a, 'b) CEnt.world -> unit
  val fold_entities :
    (CEnt.entity -> '-> 'p) -> ('a, 'b) CEnt.world -> '-> 'p
  val num_entities : ('a, 'b) CEnt.world -> int
  val num_entities_with_components :
    ('a, 'b) CEnt.world -> Comp.component_type list -> int
  type mapper = Comp.component_type Ent.mapper
  val make_mapper : Comp.component_type list -> CEnt.mapper
  type 'a update = 'Ent.update
  type ('a, 'b) system =
      (Comp.component_type, Comp.component, 'a, 'b) Ent.system
  val add_system :
    ('delta, 'a) CEnt.world ->
    CEnt.mapper ->
    ?label:CEnt.system_label ->
    ('delta, 'a) CEnt.system -> ('delta, 'a) CEnt.world
  val add_systems :
    ('delta, 'a) CEnt.world ->
    (CEnt.mapper * CEnt.system_label option * ('delta, 'a) CEnt.system) list ->
    ('delta, 'a) CEnt.world
  type ('delta, 'fld) foldable_system =
      (Comp.component_type, Comp.component, 'delta, 'fld) Ent.foldable_system
  val add_foldable_system :
    ('delta, 'fld) CEnt.world ->
    CEnt.mapper ->
    ?label:CEnt.system_label ->
    ('delta, 'fld) CEnt.foldable_system -> ('delta, 'fld) CEnt.world
  val add_foldable_systems :
    ('delta, 'fld) CEnt.world ->
    (CEnt.mapper * CEnt.system_label option *
     ('delta, 'fld) CEnt.foldable_system)
    list -> ('delta, 'fld) CEnt.world
end