( ref: Ref.Ref<Array<A>> )
| 42 | } |
| 43 | |
| 44 | export const refReader = <A>( |
| 45 | ref: Ref.Ref<Array<A>> |
| 46 | ): Channel.Channel<A, unknown, never, unknown, void, unknown> => { |
| 47 | return pipe( |
| 48 | Channel.fromEffect( |
| 49 | Ref.modify(ref, (array) => { |
| 50 | if (Array.isEmptyReadonlyArray(array)) { |
| 51 | return [Option.none(), Array.empty<A>()] as const |
| 52 | } |
| 53 | return [Option.some(array[0]!), array.slice(1)] as const |
| 54 | }) |
| 55 | ), |
| 56 | Channel.flatMap(Option.match({ |
| 57 | onNone: () => Channel.void, |
| 58 | onSome: (i) => Channel.flatMap(Channel.write(i), () => refReader(ref)) |
| 59 | })) |
| 60 | ) |
| 61 | } |
| 62 | |
| 63 | describe("Channel", () => { |
| 64 | it.effect("simple reads", () => |
no test coverage detected