sig
  type iworld_t
  type ('a, 'b) t =
      State of 'a
    | Bundle of 'a * (Universe.iworld_t * 'b) list * Universe.iworld_t list
  val universe :
    ?on_new:('-> Universe.iworld_t -> ('a, 'b) Universe.t) ->
    ?on_msg:('-> Universe.iworld_t -> '-> ('a, 'b) Universe.t) ->
    ?rate:float ->
    ?on_tick:('-> ('a, 'b) Universe.t) ->
    ?on_disconnect:('-> Universe.iworld_t -> ('a, 'b) Universe.t) ->
    '-> unit
end