import type { STMTypeId } from "@effect/core/stm/STM" /** * Applicative structure. * * @tsplus static effect/core/stm/STM.Ops struct */ export function struct>>( r: EnforceNonEmptyRecord & Record> ): STM< [NER[keyof NER]] extends [{ [STMTypeId]: { _R: (_: never) => infer R } }] ? R : never, [NER[keyof NER]] extends [{ [STMTypeId]: { _E: (_: never) => infer E } }] ? E : never, { [K in keyof NER]: [NER[K]] extends [STM] ? A : never } > { return STM.forEach( Object.entries(r), ([_, e]) => e.map((a) => [_, a] as const) ).map((values) => { const res = {} for (const [k, v] of values) { res[k] = v } return res }) as any }