Computation Expression

TaskValidation Computation Expression

Namespace: FsToolkit.ErrorHandling

The TaskValidation type is defined as:

type TaskValidation<'a,'err> = Task<Result<'a, 'err list>>

This CE can take advantage of the and! operator to join multiple error results into a list.

Examples

See here for other validation-like examples

// Result<string, string> -> Task<Result<string, string>>
let downloadTask stuff = task {
    return stuff
}

// TaskValidation<string, string>
let addResult = taskValidation {
  let! x = downloadTask (Ok "I")
  and! y = downloadTask (Ok "am")
  and! z = downloadTask (Ok "async!")
  return sprintf "%s %s %s" x y z
}
// task { return Ok "I am async!" }

// TaskValidation<string, string>
let addResult = taskValidation {
  let! x = downloadTask (Error "Am")
  and! y = downloadTask (Error "I")
  and! z = downloadTask (Error "async?")
  return sprintf "%s %s %s" x y z
}

// task { return Error [ "Am"; "I"; "async?" ] }

Last updated