Created
November 18, 2021 16:11
-
-
Save ImaginaryDevelopment/3662e702d0f792fb34e2244d3883beb4 to your computer and use it in GitHub Desktop.
LogBuilder Computation 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
let logStep action = | |
let res = action <| printf "%s... " | |
printfn "Complete." | |
res | |
type LoggingBuilder() = | |
member this.Bind(x, f) = | |
logStep x |> f | |
member this.Zero() = ignore | |
member this.Return(x) = x | |
let logBuilder = new LoggingBuilder() | |
let loggedAddxy x y logFn = | |
logFn <| sprintf "Adding %d + %d" x y | |
x + y | |
let loggedTupledAddxy (x,y) = loggedAddxy x y | |
let loggedNonIntThing () logFn = | |
logFn <| sprintf "Logging a non-int thing" | |
"hello" | |
let loggedWorkflow = | |
logBuilder { | |
let! z = loggedAddxy 2 3 | |
let! w = loggedAddxy 8 z | |
let! _text = loggedNonIntThing () | |
return w | |
} | |
printfn "%d" loggedWorkflow |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment