Declarative events and signals for OCaml