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

  public Path getParent() {
    if (this.isEmpty()) {
      return null;
    } else {
      return new Path(pieces, start, end - 1);
    }
  }

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

}