Skip to content

True Myth / task / flatten

Function: flatten()

flatten<T, E, F>(nestedTask): Task<T, E | F>

Given a nested Task, remove one layer of nesting.

For example, given a Task<Task<string, E2>, E1>, the resulting type after using this function will be Task<string, E1 | E2>.

Note

This function only works when the value wrapped in Task is another Task. If you have a Task<string, E> or Task<number, E>, this function won't work. If you have a Task<Task<string, E2>, E1>, then you can call .flatten() to get back a Task<string, E1 | E2>.

Examples

ts
import * as task from 'true-myth/task';

const nested = task.resolve(task.resolve('hello'));
const flattened = task.flatten(nested); // Task<string, never>
await flattened;
console.log(flattened); // `Resolved('hello')`

const nestedError = task.resolve(task.reject('inner error'));
const flattenedError = task.flatten(nestedError); // Task<never, string>
await flattenedError;
console.log(flattenedError); // `Rejected('inner error')`

const errorNested = task.reject<Task<string, string>, string>('outer error');
const flattenedOuter = task.flatten(errorNested); // Task<string, string>
await flattenedOuter;
console.log(flattenedOuter); // `Rejected('outer error')`

Type Parameters

T

T

E

E

F

F

Parameters

nestedTask

Task<Task<T, E>, F>

Returns

Task<T, E | F>