createEdgeNUnsafe :: Label -> Node -> Node -> GS (Edge, Node, Node)
createEdgeNUnsafe l sn en = do i <- incrementEdgeId
                               eli <- createEdgeLabel l
                               let e = emptyEdge eli i sn en
                               n1 <- addOutEdge e en eli sn
                               n2 <- addInEdge e sn eli en
                               se <- saveEdge e
                               return (se, n1, n2)
createEdgeNUnsafe :: Label -> Node -> Node -> GS (Edge, Node, Node)
createEdgeNUnsafe l sn en = do i <- incrementEdgeId
                               eli <- createEdgeLabel l
                               let e = emptyEdge eli i sn en
                               n1 <- addOutEdge e en eli sn
                               n2 <- addInEdge e sn eli en
                               se <- saveEdge e
                               return (se, n1, n2)
createEdgeNUnsafe l sn en = do i <- incrementEdgeId
                               eli <- createEdgeLabel l
                               let e = emptyEdge eli i sn en
                               n1 <- addOutEdge e en eli sn
                               n2 <- addInEdge e sn eli en
                               se <- saveEdge e
                               return (se, n1, n2)