sig
  type ('a, 'b) t = World of '| Package of 'a * 'b
  val big_bang :
    ?name:string ->
    ?width:int ->
    ?height:int ->
    ?to_draw:('-> Image.t) ->
    ?on_tick:('-> ('a, 'b) World.t) ->
    ?on_mouse:('-> float -> float -> string -> ('a, 'c) World.t) ->
    ?on_key_press:('-> string -> ('a, 'd) World.t) ->
    ?on_key_release:('-> string -> ('a, 'e) World.t) ->
    ?rate:float ->
    ?stop_when:('-> bool) ->
    ?to_draw_last:('-> Image.t) ->
    ?register:string * string ->
    ?on_receive:('-> '-> ('a, 'g) World.t) -> '-> unit
end