export function * chunkWhileGen<T> (iter: Iterable<T>, func: ChunkingPredicate<T>): Iterable<Array<T>> {
  let chunk: Array<T> = []

  for (const elem of iter) {
    if (chunk.length === 0 || func(elem, chunk[chunk.length - 1], chunk[0])) {