【.NET】F#について語 ..
[2ch|▼Menu]
151:名無しさん♯
07/11/21 08:05:42
Asyncを単純化するとこんな感じなのかな?( ´・ω・)


#light

type Async<'a> = Async of (('a -> unit) * (exn -> unit) -> unit)
 with
  static member Run (Async x) = x

let unit a = Async (fun (cont, _) -> cont a)

let bind m k =
 Async (fun (cont, econt) ->
  let cnext = fun a -> try Async.Run (k a) (cont, econt) with exn -> econt exn
  Async.Run m (cnext, econt))


で、実際にはここでのunit→resultPrim, bind→bindAsyncPrim相当でしかなくて、
これにキャンセルサポート(AsyncGroup)を追加してはじめてresultAsync, bindAsync相当になる、と。

モナドの定義自体にはスレッド云々は関係なくて、モナドを起動する側(Run, Spawn)の方で
スレッドに結びつけてる、と。

これをC#で表現するのはめんどいのう。(´・ω・`)


次ページ
続きを表示
1を表示
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5388日前に更新/121 KB
担当:undef