Skip to content

Add Option.sequenceTask and Option.traverseTask + various permutations #323

Closed
@tw0po1nt

Description

@tw0po1nt

Is your feature request related to a problem? Please describe.

The Option module includes traverse and sequence operations for use with Async (per #298), but not Task. Since the prevailing wisdom for F# code going forward seems to be "prefer Task", having these functions would encourage that choice.

Describe the solution you'd like
I'd like the following functions implemented in the Option module:

// traverseTask: ('a -> Task<'b>) -> 'a option -> Task<'b option>
// sequenceTask:  Task<'a> option -> Task<'a option>

Additionally, some other permutations that would be useful:

To match functions added in #321

// traverseTaskResult: ('a -> Task<Result<'b,'c>>) -> 'a option -> Task<Result<'b option, 'c>>
// sequenceTaskResult:  Task<Result<'a, 'e>> option -> Task<Result<'a option>, 'e>

It could also be useful to have permutations that work with IcedTasks, such as:

// traverseCancellableTaskResult: ('a -> CancellableTask<Result<'b,'c>>) -> 'a option -> CancellableTask<Result<'b option, 'c>>
// sequenceCancellableTaskResult:  CancellableTask<Result<'a, 'e>> option -> CancellableTask<Result<'a option>, 'e>

Since there are a potentially large amount of possible permutations, I'm partial to breaking this into a few issues / PRs, but this at least gets the conversation started.

Describe alternatives you've considered
Custom extensions in each codebase that needs these functions

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions