osiire’s blog

ふしぎなそふとやさん

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