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