/** * @tsplus static effect/core/stm/TMap.Aspects takeFirstSTM * @tsplus pipeable effect/core/stm/TMap takeFirstSTM */ export function takeFirstSTM( pf: (kv: readonly [K, V]) => STM, A> ) { return (self: TMap): STM => self.findSTM((kv) => pf(kv).map((a) => [kv[0], a] as const)).continueOrRetry(identity).flatMap(( kv ) => self.delete(kv[0]).as(kv[1])) }