new_contents: def restricted_cover(l, succsOf):
  	""" Returns a restricted <succsOf> which only takes and yields
  	    values from <l> """
  	fzl = frozenset(l)
  	lut = dict()
  	for i in l:
  		lut[i] = fzl.intersection(succsOf(i))
  	return lambda x: lut[x]
  
  def dual_cover(l, succsOf):
  	""" <succsOf> assigns to each element of <l> a list of successors.
  	    This function returns the dual, "predsOf" if you will. """ 
  	lut = dict()
  	for i in l:
  		lut[i] = list()
  	for i in l:
  		for j in succsOf(i):
  			lut[j].append(i)
  	return lambda x: lut[x]
  		
  def sort_by_successors(l, succsOf):
  	""" Sorts a list, such that if l[b] in succsOf(l[a]) then a < b """
  	rlut = dict()
  	nret = 0
  	todo = list()
  	for i in l:
  		rlut[i] = set()
  	for i in l:
  		for j in succsOf(i):
  			rlut[j].add(i)
  	for i in l:
  		if len(rlut[i]) == 0:
  			todo.append(i)
  	while len(todo) > 0:
  		i = todo.pop()
  		nret += 1
  		yield i
  		for j in succsOf(i):
  			rlut[j].remove(i)
  			if len(rlut[j]) == 0:
  				todo.append(j)
  	if nret != len(l):
  		raise ValueError, "Cycle detected"
  
subject: Add order