Anatoly Yakovenko a écrit :
> basically i am dealing with a 3rd party library, (interactive brokers
> tws api), that takes an interface with lots of different methods that
> it calls when an event occurs.  like received market data, received
> order, etc...  It provides another interface that basically generates
> these events.
>
> Some of the events are statefull, like i canceled an order, i get a
> response that the order cancel was received, and then i get a
> confirmation that the order was canceled.
>
> If i was implementing this in haskell, (i am at the moment, but
> writing the bindings is a pain in the arse), i would pump all the
> events into a Chan, essentially a lazy evaluated sequence used to get
> stuff from IO, and write a parser on top of that.  

This first part is rather easy to port to Clojure, use a BlockingQueue 
to buffer events received by the callback interface:
  (def #^java.util.concurrent.BlockingQueue q 
(java.util.concurrent.LinkedBlockingQueue.))
and in your consumer thread, turn it into a sequence:
  (def s (repeatedly #(.take q))) ; (EOS handling is left as an exercise)

For the parser part, I'm afraid there's no such thing right now. Maybe 
can you build upon Konrad's monads library?

HTH Christophe


-- 
Professional: http://cgrand.net/ (fr)
On Clojure: http://clj-me.blogspot.com/ (en)



--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To post to this group, send email to clojure@googlegroups.com
To unsubscribe from this group, send email to 
clojure+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to