Add bindL to DoEither
This commit is contained in:
parent
d88075c169
commit
07a74315e1
@ -106,6 +106,26 @@ export class DoEither<T extends Record<string, unknown>, E> {
|
|||||||
return new DoEither(newEither)
|
return new DoEither(newEither)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Binds a new value to the scope using a lazily evaluated Either
|
||||||
|
* @typeParam K - The key to bind to
|
||||||
|
* @typeParam A - The type of the value to bind
|
||||||
|
* @param key - The property name to bind to
|
||||||
|
* @param f - Function returning the Either value to bind (receives current scope)
|
||||||
|
* @returns A new DoEither instance with the extended scope
|
||||||
|
*/
|
||||||
|
bindL<K extends string, A>(
|
||||||
|
key: K,
|
||||||
|
f: (scope: T) => Either<A, E>,
|
||||||
|
): DoEither<T & Record<K, A>, E> {
|
||||||
|
const newEither = eitherChain<T, T & Record<K, A>, E>((scope: T) =>
|
||||||
|
eitherMap<A, T & Record<K, A>, E>((a: A) => ({...scope, [key]: a}))(
|
||||||
|
f(scope),
|
||||||
|
)
|
||||||
|
)(this.either)
|
||||||
|
return new DoEither(newEither)
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the final result from the scope
|
* Returns the final result from the scope
|
||||||
* @typeParam B - The return type
|
* @typeParam B - The return type
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user