Created
March 25, 2017 14:29
-
-
Save smallgeek/63f1a211f3187bc2e982ed9229c203c3 to your computer and use it in GitHub Desktop.
リアクティブプログラミングの擬似コードでよく見るやつ
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
open System | |
open System.Reactive | |
open System.Reactive.Subjects | |
open System.Reactive.Linq | |
open Microsoft.FSharp.Control | |
open FSharp.Control.Reactive | |
open FSharp.Control.Reactive.Builders | |
open FSharp.Data | |
type BehaviorSubject<'a> with | |
member this.setValue x = this.OnNext x | |
type Cell<'a> = BehaviorSubject<'a> | |
type ExcelBuilder() = | |
let mutable transit: IObservable<_> = null | |
member __.Bind(m: IObservable<_>, f: _ -> IObservable<_>) = | |
transit <- Observable.bind f m | |
transit | |
member __.Return(x) = | |
let source = Observable.publishInitial x transit | |
source :?> IObservable<_> | |
let excel = new ExcelBuilder() | |
let a1 = new Cell<int> 1 | |
let b1 = new Cell<int> 2 | |
let c1 = excel { | |
let! x = a1 | |
let! y = b1 | |
return x + y | |
} | |
c1 |> Observable.subscribe (fun x -> printfn "%i" x) |> ignore | |
a1.setValue 3 // a1(3) + b1(2) | |
stdin.Read() |> ignore |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment