2.2. A silly example

Two kinds of events:

type event = 
  A of int
| B
This event source produces ten events from A 1 to A 10:
let n = ref 1
let source esys =
  if !n <= 10 then begin
    Equeue.add_event esys (A !n);
    incr n
  end
The handler for type A events puts as many type B events on the queue as the argument counts.
let handler_a esys e =
  match e with 
    A n ->
      for i = 1 to n do
        Equeue.add_event esys B
      done
  | _ ->
      raise Equeue.Reject
The handler for type B events simply prints the events:
let handler_b esys e =
  match e with
    B ->
      print_endline "B"
  | _ ->
      raise Equeue.Reject
Finally, we set up the event system and start it:
let esys = Equeue.create source in
Equeue.add_handler esys handler_a;
Equeue.add_handler esys handler_b;
Equeue.run esys;
As result, the program prints 55 Bs.