Jane Street's Async library for OCaml does this: http://ocaml.janestreet.com/?q=node/100. It's excellent, and I now miss it in every other language I use.
Code looks something like this:
...
(* long_running_call : unit -> string Deferred.t *)
long_running_call ()
>>= fun result ->
print_endline result
...
Running calls in parallel is easy. Say we want to run a couple of queries against a db at once, and only perform an action once both return: ...
(* Db.query : Db -> Db.Query -> Db.Result Deferred.t *)
let d1 = Db.query db query1 in
let d2 = Db.query db query2 in
d1 >>= fun r1 ->
d2 >>= fun r2 ->
...
If you have questions about getting it set up/using it, the mailing list is the place to ask: https://groups.google.com/forum/#!forum/ocaml-core