Thanks to visit codestin.com
Credit goes to fsprojects.github.io

FSharp.Control.R3 0.3.0

Edit this page

Getting Started

To use the raw R3 from F# you would add first the NuGet package to R3:

paket install R3

Then, this is a working sample:

open System

// Create a bus
use r3Bus = new R3.Subject<int> ()

// Filter events
let interesting = R3.ObservableExtensions.Where (r3Bus, fun x -> x % 2 = 0)

// Subscribe to events
let subscription =
    R3.ObservableExtensions.SubscribeAwait (
        interesting,
        fun i cancellationToken ->
            task {
                // Listen events
                printfn "%i" i
                return ()
            }
            |> System.Threading.Tasks.ValueTask
    )

// Publish some events
[ 1..10 ] |> List.iter r3Bus.OnNext

As you can see, this is nice, but a little bit noisy. This package will come top help.

Then you do:

paket install FSharp.Control.R3

Now you can use functions closer to the traditional F#-style, like:

// Filter events
let interesting = r3Bus |> FSharp.Control.R3.Observable.filter (fun x -> x % 2 = 0)
namespace System
val r3Bus: obj
Multiple items
val int: value: 'T -> int (requires member op_Explicit)

--------------------
type int = int32

--------------------
type int<'Measure> = int
val interesting: obj
val subscription: obj
val task: TaskBuilder
val printfn: format: Printf.TextWriterFormat<'T> -> 'T
namespace System.Threading
namespace System.Threading.Tasks
Multiple items
[<Struct>] type ValueTask<'TResult> = new: source: IValueTaskSource<'TResult> * token: int16 -> unit + 2 overloads member AsTask: unit -> Task<'TResult> member ConfigureAwait: continueOnCapturedContext: bool -> ConfiguredValueTaskAwaitable<'TResult> member Equals: obj: obj -> bool + 1 overload member GetAwaiter: unit -> ValueTaskAwaiter<'TResult> member GetHashCode: unit -> int member Preserve: unit -> ValueTask<'TResult> member ToString: unit -> string static member (<>) : left: ValueTask<'TResult> * right: ValueTask<'TResult> -> bool static member (=) : left: ValueTask<'TResult> * right: ValueTask<'TResult> -> bool ...
<summary>Provides a value type that wraps a <see cref="T:System.Threading.Tasks.Task`1" /> and a <typeparamref name="TResult" />, only one of which is used.</summary>
<typeparam name="TResult">The result.</typeparam>


--------------------
[<Struct>] type ValueTask = new: source: IValueTaskSource * token: int16 -> unit + 1 overload member AsTask: unit -> Task member ConfigureAwait: continueOnCapturedContext: bool -> ConfiguredValueTaskAwaitable member Equals: obj: obj -> bool + 1 overload member GetAwaiter: unit -> ValueTaskAwaiter member GetHashCode: unit -> int member Preserve: unit -> ValueTask static member (<>) : left: ValueTask * right: ValueTask -> bool static member (=) : left: ValueTask * right: ValueTask -> bool static member FromCanceled: cancellationToken: CancellationToken -> ValueTask + 1 overload ...
<summary>Provides an awaitable result of an asynchronous operation.</summary>

--------------------
Threading.Tasks.ValueTask ()
Threading.Tasks.ValueTask(task: Threading.Tasks.Task<'TResult>) : Threading.Tasks.ValueTask<'TResult>
Threading.Tasks.ValueTask(result: 'TResult) : Threading.Tasks.ValueTask<'TResult>
Threading.Tasks.ValueTask(source: Threading.Tasks.Sources.IValueTaskSource<'TResult>, token: int16) : Threading.Tasks.ValueTask<'TResult>

--------------------
Threading.Tasks.ValueTask ()
Threading.Tasks.ValueTask(task: Threading.Tasks.Task) : Threading.Tasks.ValueTask
Threading.Tasks.ValueTask(source: Threading.Tasks.Sources.IValueTaskSource, token: int16) : Threading.Tasks.ValueTask
Multiple items
module List from Microsoft.FSharp.Collections

--------------------
type List<'T> = | op_Nil | op_ColonColon of Head: 'T * Tail: 'T list interface IReadOnlyList<'T> interface IReadOnlyCollection<'T> interface IEnumerable interface IEnumerable<'T> member GetReverseIndex: rank: int * offset: int -> int member GetSlice: startIndex: int option * endIndex: int option -> 'T list static member Cons: head: 'T * tail: 'T list -> 'T list member Head: 'T member IsEmpty: bool member Item: index: int -> 'T with get ...
val iter: action: ('T -> unit) -> list: 'T list -> unit
namespace Microsoft.FSharp
namespace Microsoft.FSharp.Control