Created
January 18, 2013 16:31
-
-
Save michael-newton-15below/4565838 to your computer and use it in GitHub Desktop.
Corrected builder implementation to use a lazy continuation style computational expression.
This file contains hidden or 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
type TestErrorBuilder () = | |
member this.Bind (expr, func) = | |
try | |
match expr () with | |
| None -> fun () -> None | |
| Some r -> | |
func r | |
with | |
| _ as e -> | |
printfn "%A" e | |
fun () -> None | |
member this.Delay (f: unit -> AuditedProcess<'U>) : AuditedProcess<'U> = | |
this.Bind (this.Return (), f) | |
member this.Return<'T> (value : 'T) : AuditedProcess<'T> = | |
fun () -> Some value | |
member this.ReturnFrom (value) = | |
value | |
member this.TryFinally (expr, comp) = | |
try expr | |
finally comp () | |
member this.Using (res : #System.IDisposable, expr) = | |
this.TryFinally(expr res, fun () -> res.Dispose()) | |
member this.Zero () = | |
fun () -> None | |
interface IAuditBuilder with | |
member this.Bind (expr, func) = this.Bind (expr, func) | |
member this.Delay (f) = this.Delay (f) | |
member this.Return (value) = this.Return (value) | |
member this.ReturnFrom (value) = this.ReturnFrom(value) | |
member this.TryFinally (expr, comp) = this.TryFinally (expr, comp) | |
member this.Using (res : #System.IDisposable, expr) = this.Using (res, expr) | |
member this.Zero () = this.Zero () |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment