Concurrent MLのイベントをモナドにするだけでこんなに便利。
非同期な通信もまとめて扱える。F#の非同期ライブラリっぽい。すごい。
module E = Ccell.Event let async_http_get host = E.future http_get host let counter = let open E in perform r <-- async_http_get "www.itpl.co.jp"; urls <-- return (grep_url r); rs <-- sequence (List.map async_http_get urls); return (List.fold_left count_lines 0 rs) let _ = print_int (E.sync counter); flush stdout