bind

Namespace: FsToolkit.ErrorHandling

Function Signature

('input -> CancellableTask<'output option>) -> CancellableTask<'input option> -> CancellableTask<'output option>

Examples

Take the following function for example

type Account =
  { EmailAddress : string
    Name : string }

// string -> CancellableTask<Account option>
let lookupAccountByEmail email = cancellableTask {
  let john = { EmailAddress = "john@test.com"; Name = "John Johnson" }
  let jeff = { EmailAddress = "jeff@test.com"; Name = "Jeff Jefferson" }
  let jack = { EmailAddress = "jack@test.com"; Name = "Jack Jackson" }
  
  // Just a map lookup, but imagine we look up an account in our database
  let accounts = Map.ofList [
      ("john@test.com", john)
      ("jeff@test.com", jeff)
      ("jack@test.com", jack)
  ]
  
  return Map.tryFind email accounts
}

Example 1

let taskOpt : CancellableTask<Account option> =
    CancellableTaskOption.some "john@test.com" // CancellableTask<string option>
    |> CancellableTaskOption.bind lookupAccountByEmail // CancellableTask<Account option>

// cancellableTask { Some { EmailAddress = "john@test.com"; Name = "John Johnson" } }

Example 2

let taskOpt : CancellableTask<Account option> =
    CancellableTaskOption.some "jerry@test.com" // CancellableTask<string option>
    |> CancellableTaskOption.bind lookupAccountByEmail // CancellableTask<Account option>

// cancellableTask { None }

Example 3

let taskOpt : CancellableTask<Account option> =
    CancellableTask.singleton None // CancellableTask<string option>
    |> CancellableTaskOption.bind lookupAccountByEmail // CancellableTask<Account option>

// cancellableTask { None }

Last updated