
On Thu, 18 Sep 2008, Andre Nathan wrote:
The issue I hit was when writing the function to add a vertex to the graph. Since I need to update the vertex counter, I've used the state monad:
addVertex :: Int -> a -> State (Graph a b) () addVertex vertex label = do g <- get let adj = Map.insert vertex (label, Map.empty) (adjacencies g) put $ g { adjacencies = adj, numVertices = numVertices g + 1 }
That works fine, but from the point of view of a user of the library, the addVertex function should take a "Graph a b" as its first argument, as one would expect to be able to say which graph is going to be modified.
Think of the state monad as processing a graph in-place. Which graph is addressed is declared when running the State monad using runState or evalState.