The difference between `Edge` and `GraphEdge` is a bit confusing, maybe find better names? (Likewise for nodes.)