deleteEdge :: Edge -> GS ()
deleteEdge e = do g <- get
                  let eid = edgeId e
                  let eli = edgeLabelIndex e
                  alterEdges $ M.delete eid (edges g)
                  sn <- getStartNodeN e
                  en <- getEndNodeE e
                  _ <- removeOutEdge e eli sn
                  _ <- removeInEdge e eli en
                  return ()
deleteEdge :: Edge -> GS ()
deleteEdge e = do g <- get
                  let eid = edgeId e
                  let eli = edgeLabelIndex e
                  alterEdges $ M.delete eid (edges g)
                  sn <- getStartNodeN e
                  en <- getEndNodeE e
                  _ <- removeOutEdge e eli sn
                  _ <- removeInEdge e eli en
                  return ()
deleteEdge e = do g <- get
                  let eid = edgeId e
                  let eli = edgeLabelIndex e
                  alterEdges $ M.delete eid (edges g)
                  sn <- getStartNodeN e
                  en <- getEndNodeE e
                  _ <- removeOutEdge e eli sn
                  _ <- removeInEdge e eli en
                  return ()