exception No_issue
type 'a simple_magazine =
  < publish : [ `Everyone | `Except of int ] -> 'a -> unit;
    unsubscribe : int -> unit; with_last_issue : ('a -> unit) -> unit >
class ['a] subscription :
  'a simple_magazine ->
  int ->
  callback:('a -> unit) ->
  object
    val mutable callback : 'a -> unit
    method cancel : unit
    method publish : 'a -> unit
    method receive : 'a -> unit
    method set_callback : ('a -> unit) -> unit
    method tick : unit
    method with_last_issue : ('a -> unit) -> unit
  end
class ['a, 'b] bundle :
  'a subscription ->
  'b subscription ->
  callback:('a * 'b -> unit) ->
  object
    val mutable a : 'a option
    val mutable b : 'b option
    val mutable callback : 'a * 'b -> unit
    method cancel : unit
    method set_callback : ('a * 'b -> unit) -> unit
    method tick : unit
    method with_last_issue : ('a * 'b -> unit) -> unit
  end
val id : int ref
class ['a] magazine :
  object
    val mutable id : int
    val mutable issue : 'a option
    val mutable subscribers : (int * 'a subscription) list
    method publish : [ `Everyone | `Except of int ] -> 'a -> unit
    method subscribe : ?callback:('a -> unit) -> unit -> 'a subscription
    method unsubscribe : int -> unit
    method with_last_issue : ('a -> unit) -> unit
  end
