MikuroXina / mini-fn

The minimal functional programming library.
https://mikuroxina.github.io/mini-fn/
Apache License 2.0
15 stars 2 forks source link

Enforce Optic features #155

Closed MikuroXina closed 5 months ago

MikuroXina commented 10 months ago

Add these specialized Optics:

for realize:

MikuroXina commented 10 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> =>
        /* ... */;
MikuroXina commented 10 months ago

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>) =>
        /* ... */;