class Path implements Iterable<ChildKey>, Comparable<Path> {

  public Path popFront() {
    int newStart = this.start;
    if (!this.isEmpty()) {
      newStart++;
    }
    return new Path(pieces, newStart, this.end);
  }

  public  Path(ChildKey... segments);
  public  Path(List<String> segments);
  public  Path(String pathString);
  private  Path(ChildKey[] pieces, int start, int end);

}