F# Computation Expression 構文内で Reactive Extension を使用する Rx Builder を考え出そうとしています。スタックを吹き飛ばさないように修正するにはどうすればよいですか? 以下の Seq の例のように。また、Reactive Extensions の一部として、または .NET Framework の将来のバージョンの一部として、RxBuilder の実装を提供する計画はありますか?
open System
open System.Linq
open System.Reactive.Linq
type rxBuilder() =
member this.Delay f = Observable.Defer f
member this.Combine (xs: IObservable<_>, ys : IObservable<_>) =
Observable.merge xs ys
member this.Yield x = Observable.Return x
member this.YieldFrom (xs:IObservable<_>) = xs
let rx = rxBuilder()
let rec f x = seq { yield x
yield! f (x + 1) }
let rec g x = rx { yield x
yield! g (x + 1) }
//do f 5 |> Seq.iter (printfn "%A")
do g 5 |> Observable.subscribe (printfn "%A") |> ignore
do System.Console.ReadLine() |> ignore