@@ -99,6 +99,30 @@ export const mapOptionEffect: {
|
||||
onNone: () => Effect.succeed(Option.none()),
|
||||
})))
|
||||
|
||||
/** Converts typed failures from both channels into `Result` values. */
|
||||
export const result = <A, E, R>(
|
||||
self: View<A, E, R>,
|
||||
): View<Result.Result<A, E>, never, R> => make({
|
||||
get get() { return Effect.result(self.get) },
|
||||
get changes() { return Stream.result(self.changes) },
|
||||
})
|
||||
|
||||
/**
|
||||
* Combines the current values and streams of changes from multiple `View` values.
|
||||
*/
|
||||
export const zipLatestAll = <const T extends readonly View<any, any, any>[]>(
|
||||
...elements: T
|
||||
): View<
|
||||
[T[number]] extends [never]
|
||||
? never
|
||||
: { [K in keyof T]: T[K] extends View<infer A, infer _E, infer _R> ? A : never },
|
||||
[T[number]] extends [never] ? never : T[number] extends View<infer _A, infer E, infer _R> ? E : never,
|
||||
[T[number]] extends [never] ? never : T[number] extends View<infer _A, infer _E, infer R> ? R : never
|
||||
> => make({
|
||||
get: Effect.all(elements.map(view => view.get)),
|
||||
changes: Stream.zipLatestAll(...elements.map(view => view.changes)),
|
||||
}) as any
|
||||
|
||||
|
||||
/** Maps errors from both the current value and the stream of changes. */
|
||||
export const mapError: {
|
||||
@@ -192,14 +216,6 @@ export const retry: {
|
||||
get changes() { return Stream.retry(self.changes, policy) },
|
||||
}))
|
||||
|
||||
/** Converts typed failures from both channels into `Result` values. */
|
||||
export const result = <A, E, R>(
|
||||
self: View<A, E, R>,
|
||||
): View<Result.Result<A, E>, never, R> => make({
|
||||
get get() { return Effect.result(self.get) },
|
||||
get changes() { return Stream.result(self.changes) },
|
||||
})
|
||||
|
||||
|
||||
/** Narrows the focus to a field of an object. */
|
||||
export const focusObjectOn: {
|
||||
|
||||
@@ -40,6 +40,22 @@ export const mapOptionEffect: {
|
||||
onNone: () => Effect.succeed(Option.none()),
|
||||
})))
|
||||
|
||||
/**
|
||||
* Combines the current values and streams of changes from multiple `Subscribable` values.
|
||||
*/
|
||||
export const zipLatestAll = <const T extends readonly Subscribable.Subscribable<any, any, any>[]>(
|
||||
...elements: T
|
||||
): Subscribable.Subscribable<
|
||||
[T[number]] extends [never]
|
||||
? never
|
||||
: { [K in keyof T]: T[K] extends Subscribable.Subscribable<infer A, infer _E, infer _R> ? A : never },
|
||||
[T[number]] extends [never] ? never : T[number] extends Subscribable.Subscribable<infer _A, infer E, infer _R> ? E : never,
|
||||
[T[number]] extends [never] ? never : T[number] extends Subscribable.Subscribable<infer _A, infer _E, infer R> ? R : never
|
||||
> => Subscribable.make({
|
||||
get: Effect.all(elements.map(view => view.get)),
|
||||
changes: Stream.zipLatestAll(...elements.map(view => view.changes)),
|
||||
}) as any
|
||||
|
||||
|
||||
/**
|
||||
* Maps errors from both the current value and the stream of changes.
|
||||
|
||||
Reference in New Issue
Block a user