// ets_tracing: off import * as R from "../Collections/Immutable/Dictionary/index.js" import type { _E, _R, EnforceNonEmptyRecord } from "../Utils/index.js" import type { Async } from "./core.js" import { map_ } from "./core.js" import { forEach_, forEachPar_ } from "./excl-forEach.js" /** * Applicative structure */ export function struct>>( r: EnforceNonEmptyRecord & Record> ): Async< _R, _E, { [K in keyof NER]: [NER[K]] extends [Async] ? A : never } > { return map_( forEach_( R.collect_(r, (k, v) => [k, v] as const), ([_, e]) => map_(e, (a) => [_, a] as const) ), (values) => { const res = {} for (const [k, v] of values) { res[k] = v } return res } ) as any } /** * Applicative structure processed in parallel */ export function structPar>>( r: EnforceNonEmptyRecord & Record>, __trace?: string ): Async< _R, _E, { [K in keyof NER]: [NER[K]] extends [Async] ? A : never } > { return map_( forEachPar_( R.collect_(r, (k, v) => [k, v] as const), ([_, e]) => map_(e, (a) => [_, a] as const) ), (values) => { const res = {} for (const [k, v] of values) { res[k] = v } return res } ) as any }