Observed from sequence in F #

Is there a way to create an observable from a sequence in F #?

The required behavior is that the observer who subscribes to the received observable receives all values ​​of the sequence one at a time.

Change . The question can be framed as: is there an equivalent Rx.Observable.FromArray([1,2,3]), as shown here in F #?

Edit 2 : Thanks everyone. It took me a while to find the answer, only to find that Desco had already answered. For completeness, here's how it works:

//Using the Reactive Framework.
//References to System.CoreEx.dll and System.Reactive.dll are needed.

open System.Linq

let observable = Observable.ToObservable [1..10]
let odds = observable |> Observable.filter (fun i -> i%2=1)
let disp = odds.Subscribe (fun i -> printfn "%d" i)
disp.Dispose ()
+3
source share
3 answers

, , F # Observable.guard, fooobar.com/questions/513786/....

:

module Observable = 
  let ofSeq s = 
    let evt = new Event<_>()
    evt.Publish |> Observable.guard (fun o ->
      for n in s do evt.Trigger(n))

[ 1 .. 10 ] |> Observable.ofSeq
            |> Observable.filter (fun n -> n%2 = 0)
            |> Observable.add (printfn "%d")

Observable.guard :

/// Creates an observable that calls the specified function after someone
/// subscribes to it (useful for waiting using 'let!' when we need to start
/// operation after 'let!' attaches handler)
let guard f (e:IObservable<'Args>) =  
  { new IObservable<'Args> with  
      member x.Subscribe(observer) =  
        let rm = e.Subscribe(observer) in f(); rm } 
+10

Source: https://habr.com/ru/post/1767648/


All Articles