code: func WriteDot(w io.Writer, nodes []Node) error {
  	w.Write([]byte("digraph {\n"))
  	defer w.Write([]byte("}\n"))
  
  	for _, n := range nodes {
  		nodeLine := fmt.Sprintf("\t\"%s\";\n", n)
  
  		w.Write([]byte(nodeLine))
  
  		for _, edge := range n.Edges() {
  			target := edge.Tail()
  			line := fmt.Sprintf("\t\"%s\" -> \"%s\" [label=\"%s\"];\n",
  				n, target, edge)
  			w.Write([]byte(line))
  		}
  	}
  
  	return nil
  }
docs: // WriteDot is used to emit a GraphViz compatible definition
  // for a directed graph. It can be used to dump a .dot file.