docs: def add_edge(self, fro, to):
          """
          When doing topological sorting, the semantics of the edge mean that
          the depedency runs from the parent to the child - which is to say that
          the parent is required to be sorted *before* the child.
  
                    [ FROM ] ------> [ TO ]
          Committee on Finance -> Subcommittee of the Finance Committee on Budget
                               -> Subcommittee of the Finance Committee on Roads
          """
          self.add_node(fro)
          self.add_node(to)
          self.edges[fro].add(to)