Как мне изменить реализацию Rx Builder, чтобы исправить исключение переполнения стека?

Я пытаюсь придумать Rx Builder для использования Reactive Extension в синтаксисе F # Computation Expression. Как исправить, чтобы не взорвал стек? Как в примере ниже. И есть ли планы предоставить реализацию RxBuilder как часть реактивных расширений или как часть будущих версий .NET Framework?

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
11
задан Tomas Petricek 24 January 2012 в 14:26
поделиться