public Iterable<Edge> edges(final ItemType edgeType) {
		checkNotNull(edgeType);
		return new Iterable<Edge>() {
			@Override
			public Iterator<Edge> iterator() {
				switch(edgeType) {
					case ALL: return new AllEdgeIterator();
					case EXISTING: return new MadeEdgeIterator();
					case NON_EXISTING: return new UnMadeEdgeIterator();
					default: throw new AssertionError("can't happen");
				}
			}
		};
	}