Closed MikuroXina closed 5 months ago
Merge of Optic models:
S1 --------+->[ onS1 ]--+
| |
S2 ----+->[ onS2 ]------+-> A
| |
| V
T <-+--[ setS1 ]<-+------- B
| | |
| +---+ |
| V |
+--[ setS2 ]<-+
export const newMerge =
<S1, A>(onS1: (state: S1) => A) =>
<B, T>(setS1: (state: S1) => (b: B) => T) =>
<S2>(onS2: (state: S2) => A) =>
(setS2: (state: S2) => (b: B) => T): Optic<Result<S1, S2>, T, A, B> =>
/* ... */;
Retriable of Optic models:
ok
S -->[ triable ]-+-------> A
^ |
retry | | (err, state)
| V
[ strategy ]<-[ initial state ]
|
| give up
V
T <------+--[ rollback ]<- B
export const newRetriable =
<S, E, A>(triable: (data: S) => Result<E, A>) =>
<I>(initialState: I) =>
<T>(strategy: (err: E) => (state: I) => ControlFlow<T>) =>
<B>(rollback: (modified: B) => T): Optical<S, T, A, B>) =>
/* ... */;
Add these specialized Optics:
Branch into computation flowsit can be done by Prismfor realize: