map2

TaskResult.map2

Namespace: FsToolkit.ErrorHandling

Function Signature:

('a -> 'b -> 'c) -> Task<Result<'a, 'd>> -> Task<Result<'b, 'd>> 
  -> Task<Result<'c, 'd>>

Examples

Note: Many use-cases requiring map operations can also be solved using the taskResult computation expression.

Example 1

Given the functions

getFollowerIds : UserId -> Task<Result<UserId list, exn>>
createPost : CreatePostRequest -> Task<Result<PostId, exn>>

And the type

type NotifyNewPostRequest = 
  { UserIds : UserId list
    NewPostId : PostId }
  static member Create userIds newPostsId =
    {UserIds = userIds; NewPostId = newPostsId}

We can create a NotifyNewPostRequest using TaskResult.map2 as below:

let createPostAndGetNotifyRequest (req : CreatePostRequest) = 
  //  Task<Result<UserId list, exn>>
  let getFollowersResult = getFollowerIds req.UserId

  // Task<Result<PostId, exn>>
  let createPostResult = createPost req

  // Task<Result<NotifyNewPostRequest, exn>>
  let newPostRequestResult =
    TaskResult.map2 
      NotifyNewPostRequest.Create getFollowersResult createPostResult

  // ...

Last updated