whole_func_string: function makePow(left, prev) {
    if (left.isEmpty()) {
      return prev;
    }
    const elem = left.first();
    return makePow(
      left.remove(elem),
      prev.union(prev.map(e => e.add(elem)))
    );
  }
func_code_string: function makePow(left, prev) {
    if (left.isEmpty()) {
      return prev;
    }
    const elem = left.first();
    return makePow(
      left.remove(elem),
      prev.union(prev.map(e => e.add(elem)))
    );
  }
func_documentation_string: tail recursive helper without sanity checks