Skip to content

Instantly share code, notes, and snippets.

@dam5s
Last active January 23, 2019 01:54
Show Gist options
  • Select an option

  • Save dam5s/392851fdc1a905af5191d48978bd856a to your computer and use it in GitHub Desktop.

Select an option

Save dam5s/392851fdc1a905af5191d48978bd856a to your computer and use it in GitHub Desktop.

Revisions

  1. dam5s revised this gist Jan 23, 2019. 1 changed file with 3 additions and 2 deletions.
    5 changes: 3 additions & 2 deletions Prelude.fs
    Original file line number Diff line number Diff line change
    @@ -7,8 +7,9 @@ type AsyncResult<'T, 'TError> =
    module AsyncResult =
    let map (mapping : 'T -> 'U) (result : AsyncResult<'T, 'TError>) : AsyncResult<'U, 'TError> =
    async {
    let! r = result
    return Result.map mapping r
    match! result with
    | Ok value -> return Ok (mapping value)
    | Error err -> return Error err
    }

    let bind (mapping : 'T -> AsyncResult<'U, 'TError>) (result : AsyncResult<'T, 'TError>) : AsyncResult<'U, 'TError> =
  2. dam5s created this gist Jan 23, 2019.
    19 changes: 19 additions & 0 deletions Prelude.fs
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,19 @@
    [<AutoOpen>]
    module Prelude

    type AsyncResult<'T, 'TError> =
    Async<Result<'T, 'TError>>

    module AsyncResult =
    let map (mapping : 'T -> 'U) (result : AsyncResult<'T, 'TError>) : AsyncResult<'U, 'TError> =
    async {
    let! r = result
    return Result.map mapping r
    }

    let bind (mapping : 'T -> AsyncResult<'U, 'TError>) (result : AsyncResult<'T, 'TError>) : AsyncResult<'U, 'TError> =
    async {
    match! result with
    | Ok value -> return! mapping value
    | Error err -> return Error err
    }