Skip to content

Commit

Permalink
Fix #17: View.Do: add TryWith, TryFinally, ReturnFrom
Browse files Browse the repository at this point in the history
Unfortunately I believe there are no correct semantics
for Using due to Snap's implicit lifetime.
  • Loading branch information
Tarmil committed Nov 10, 2015
1 parent 774e3cd commit ca9f223
Showing 1 changed file with 26 additions and 0 deletions.
26 changes: 26 additions & 0 deletions WebSharper.UI.Next/Reactive.fs
Expand Up @@ -271,6 +271,23 @@ type View =
let o = Snap.CreateForever x
V (fun () -> o)

static member TryWith (f: exn -> View<'T>) (V observe: View<'T>) : View<'T> =
View.CreateLazy (fun () ->
try
observe ()
with exn ->
let (V obs) = f exn
obs ()
)

static member TryFinally (f: unit -> unit) (V observe: View<'T>) : View<'T> =
View.CreateLazy (fun () ->
try
observe ()
finally
f ()
)

static member Sink act (V observe) =
let rec loop () =
let sn = observe ()
Expand Down Expand Up @@ -380,6 +397,15 @@ type ViewBuilder =
[<JavaScript; Inline>]
member b.Return x = View.Const x

[<JavaScript; Inline>]
member b.ReturnFrom(v: View<'T>) = v

[<JavaScript; Inline>]
member b.TryWith(v, f) = View.TryWith f v

[<JavaScript; Inline>]
member b.TryFinally(v, f) = View.TryFinally f v

type View with
[<JavaScript>]
static member Do = B
Expand Down

0 comments on commit ca9f223

Please sign in to comment.