Computation Expression
Namespace:
FsToolkit.ErrorHandling
let add x y z = x + y + z
let addResult : Result<int option, string> = resultOption {
let! x = Ok (Some 30)
let! y = Ok (Some 10)
let! z = Ok (Some 2)
return add x y z
}
// Ok (Some 42)
let add x y z = x + y + z
let addResult : Result<int option, string> = resultOption {
let! x = Ok (Some 30)
and! y = Error "Oops 1"
and! z = Error "Oops 2"
return add x y z
}
// Error "Oops 1"
// CreatePostRequestDto -> Result<CreatePostRequest, string>
let toCreatePostRequest (dto : CreatePostRequestDto) =
// Result<Location option, string>
let locationR = resultOption {
let! lat =
dto.Latitude
|> Option.traverseResult Latitude.TryCreate
let! lng =
dto.Longitude
|> Option.traverseResult Longitude.TryCreate
return location lat lng
}
// Result<Tweet, string>
let tweetR = Tweet.TryCreate dto.Tweet
// Result<CreatePostRequest, string>
Result.map2 createPostRequest2 tweetR locationR
Last modified 2mo ago