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:('a -> Universe.iworld_t -> ('a, 'b) Universe.t) ->
    ?on_msg:('a -> Universe.iworld_t -> 'c -> ('a, 'b) Universe.t) ->
    ?rate:float ->
    ?on_tick:('a -> ('a, 'b) Universe.t) ->
    ?on_disconnect:('a -> Universe.iworld_t -> ('a, 'b) Universe.t) ->
    'a -> unit
end