I think the typical way to handle this currently is by using a typical
handler function that is called whenever an event is fired. If the
events will be long running then you can use agents or a thread pool
(executor framework). If you need to dispatch events to other
handlers then use multi-methods.
It seems that what you are really asking for though, is a way to treat
a stream of events as a sequence. This is what they recently
introduced in .net land, with the RX framework:
http://www.leading-edge-dev.de/?p=501
Given that clojure has a nice library of sequence manipulation and
predicate functions, I think doing something similar could be useful.
I don't have a clear sense for how it would work though. You could
form a pipeline of sequence processing functions that get called
whenever a new event is fired, maybe by using a promise that gets
fulfilled when the event hits the pipeline?
-Jeff