/** * @tsplus static effect/core/stm/TQueue.Aspects takeRemainder * @tsplus pipeable effect/core/stm/TQueue takeRemainder */ export function takeRemainder(min: number, max: number, acc: Chunk) { return (self: TQueue): STM> => { if (max < min) { return STM.succeed(acc) } return self.takeUpTo(max).flatMap((bs) => { const remaining = min - bs.length if (remaining === 1) { return self.take.map((b) => acc.concat(bs).append(b)) } if (remaining > 1) { return self.take.flatMap((b) => self.takeRemainder(remaining - 1, max - bs.length - 1, acc.concat(bs).append(b)) ) } return STM.succeed(acc.concat(bs)) }) } }