Skip to content

Commit

Permalink
Add awr apply function and operators module
Browse files Browse the repository at this point in the history
  • Loading branch information
Blair55 committed Nov 22, 2020
1 parent 158f7fa commit 16affd2
Showing 1 changed file with 19 additions and 1 deletion.
20 changes: 19 additions & 1 deletion src/AsyncWriterResult/Library.fs
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,24 @@ module AsyncWriterResult =
| Error e -> return Writer <| fun () -> Error e, logs1
}

let apply f m =
async {
let! uf = f
let! um = m
let (r1, logs1) = Writer.run uf
let (r2, logs2) = Writer.run um
match r1, r2 with
| Ok g, Ok h -> return Writer <| fun () -> Ok(g h), logs1 @ logs2
| Error e1, _ -> return Writer <| fun () -> Error e1, logs1 @ logs2
| _, Error e2 -> return Writer <| fun () -> Error e2, logs1 @ logs2
}

module Operators =

let (<!>) = map
let (>>=) = bind
let (<*>) = apply

let write log =
async { return Writer(fun () -> Result.retn (), [ log ]) }

Expand Down Expand Up @@ -234,4 +252,4 @@ type AsyncWriterResultBuilder() =
member __.Bind(m, f) = AsyncWriterResult.bind f m
member __.Zero() = __.Return()

let asyncWriterResult = AsyncWriterResultBuilder()
let asyncWriterResult = AsyncWriterResultBuilder()

0 comments on commit 16affd2

Please sign in to comment.