| 122 | |
| 123 | /** @internal */ |
| 124 | export const collectAllToMap = <In, K>( |
| 125 | key: (input: In) => K, |
| 126 | merge: (x: In, y: In) => In |
| 127 | ): Sink.Sink<HashMap.HashMap<K, In>, In> => { |
| 128 | return foldLeftChunks(HashMap.empty<K, In>(), (map, chunk) => |
| 129 | pipe( |
| 130 | chunk, |
| 131 | Chunk.reduce(map, (map, input) => { |
| 132 | const k: K = key(input) |
| 133 | const v: In = pipe(map, HashMap.has(k)) ? |
| 134 | merge(pipe(map, HashMap.unsafeGet(k)), input) : |
| 135 | input |
| 136 | return pipe(map, HashMap.set(k, v)) |
| 137 | }) |
| 138 | )) |
| 139 | } |
| 140 | |
| 141 | /** @internal */ |
| 142 | export const collectAllToMapN = <In, K>( |