Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | 1x 1x 1x 1x 1x 1x 1x 11x 11x 11x 11x 11x 11x 11x 11x 11x 11x 11x 11x 11x 11x 11x 11x 4x 4x 4x 4x 4x 4x 4x 11x 11x 11x 11x | import * as TreeF from '#treeF'
import {pair, square} from '#Pair'
import {Array, Effect, flow, pipe} from 'effect'
import {getValue, match} from '../../tree/index.js'
import {getForest} from '../../tree/data.js'
import type {Tree} from '../../tree/types.js'
import type {TreeEffectUnfolder} from './types.js'
/**
* @category unfold
* @function
*/
export const annotateEffectUnfolder =
<A, B, E = never, R = never>(
ψ: TreeEffectUnfolder<A, Tree<B>, E, R>,
): TreeEffectUnfolder<[B, A], [Tree<B>, A], E, R> =>
([self, value]) =>
pipe(
self,
ψ,
Effect.map((unfolded: TreeF.TreeF<A, Tree<B>>) => {
const [b, a] = pipe(
self,
getValue,
pipe(unfolded, TreeF.getValue, pair.withSecond),
)
return pipe(
self,
match({
onLeaf: () => TreeF.leafF([b, a]),
onBranch: (_, forest) =>
TreeF.branchF(
[b, a],
Array.map(
forest,
square.mapSecond(flow(getForest, TreeF.treeF.flipped(value))),
),
),
}),
)
}),
)
|