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 world = Comp.world
  val new_world : unit -> CEnt.world
  val add_entity : CEnt.world -> CEnt.entity -> CEnt.world
  val add_entities : CEnt.world -> CEnt.entity list -> CEnt.world
  val add_entity_id : CEnt.world -> CEnt.entity -> CEnt.world * CEnt.id
  val add_entities_id :
    CEnt.world -> CEnt.entity list -> CEnt.world * CEnt.id list
  val add_entities_init :
    w:CEnt.world -> n:int -> f:(int -> CEnt.entity) -> CEnt.world
  val add_entities_ar : CEnt.world -> CEnt.entity array -> CEnt.world
  val add_entities_id_ar :
    CEnt.world -> CEnt.entity array -> CEnt.world * CEnt.id array
  val has_entity : CEnt.world -> CEnt.id -> bool
  val replace_entity : CEnt.world -> CEnt.id -> CEnt.entity -> CEnt.world
  val remove_entity : CEnt.world -> CEnt.entity -> CEnt.world
  val remove_entity_id : CEnt.world -> CEnt.id -> CEnt.world
  val get_entity : CEnt.world -> CEnt.id -> CEnt.entity
  val get_entity_opt : CEnt.world -> CEnt.id -> CEnt.entity option
  val get_entities : CEnt.world -> CEnt.id list -> CEnt.entity list
  val do_get_entities : CEnt.world -> CEnt.id list -> CEnt.entity list
  val get_entities_with_components :
    CEnt.world -> Comp.component_type list -> CEnt.entity list
  val iter_entities : (CEnt.entity -> unit) -> CEnt.world -> unit
  val fold_entities : (CEnt.entity -> '-> 'p) -> CEnt.world -> '-> 'p
  val num_entities : CEnt.world -> int
  val num_entities_with_components :
    CEnt.world -> Comp.component_type list -> int
  type mapper = Comp.component_type Ent.mapper
  val add_mapper :
    CEnt.world -> Comp.component_type list -> CEnt.world * CEnt.mapper
  type 'a update = 'Ent.update
  type 'delta system =
      (Comp.component_type, Comp.component, 'delta) Ent.system
  type ('delta, 'fld) foldable_system =
      (Comp.component_type, Comp.component, 'delta, 'fld) Ent.foldable_system
  type 'fld born_feedback_func =
      (Comp.component_type, Comp.component, 'fld) Ent.born_feedback_func
  val world_step :
    CEnt.world -> 'delta CEnt.system -> CEnt.mapper -> 'delta -> CEnt.world
  val world_step_fold :
    CEnt.world ->
    ('delta, 'fld) CEnt.foldable_system ->
    CEnt.mapper ->
    ?fb:'fld CEnt.born_feedback_func -> 'delta -> 'fld -> CEnt.world * 'fld
end