Skip to content

Instantly share code, notes, and snippets.

@ImaginaryDevelopment
Created November 18, 2021 16:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ImaginaryDevelopment/3662e702d0f792fb34e2244d3883beb4 to your computer and use it in GitHub Desktop.
Save ImaginaryDevelopment/3662e702d0f792fb34e2244d3883beb4 to your computer and use it in GitHub Desktop.
LogBuilder Computation Expression
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