Hi all I'm thinking about my next project in OCaml, and I'm wondering how many users of OCaml currently use Lwt or Async regularly. One of the advantages of OCaml over Haskell (which I'm not crazy about) is the fact that you don't have to constantly be stuck inside a monad. However, once you want to use these user-level threading libraries, you're essentially tied to a monad. It also means that the usage of any other monad from Lwt/Async code is out -- OCaml doesn't have the monad transformer infrastructure to layer monads easily as far as I can tell (am I wrong?). I mean, even in Haskell using Monad Transformers is a pain (IMO). Also, what happens to general utility functions that aren't rewritten for Async/Lwt -- as far as I can tell, being in non-monadic code, they will always starve other threads, since they cannot yield to another Async/Lwt thread. Is this perception correct? If so, this seems to imply that you either write your code to cooperate within these frameworks and suffer the monad, or don't, and make it near-impossible for Lwt/Async users to make use of your code. I would like to get an idea of the usage level of these libraries, as well as the burden of writing compatible code, any difficulties etc. Also, I'd like to get a sense of the domains that benefit from these libraries. Some domains (such as gaming) traditionally involve a continuous main loop, and would thus only suffer from the additional overhead of queuing in these libraries. -Yotam