-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | A simple monadic graph library -- -- A "not-very-Haskelly" API for calculating traversals of graphs that -- may be too large to fit into memory. The algorithms included are -- inspired by the visitor concept of the Boost Graph Library. -- -- Here is a very simple example of how we might execute a -- depth-first-search. In this case the visitor simply collects the edges -- and vertices in the order that the corresponding functions get called. -- After the necessary imports, -- --
--   import Data.Array
--   import Data.Monoid
--   import Data.Graph.AdjacencyList
--   import Data.Graph.Algorithm
--   import Data.Graph.Algorithm.DepthFirstSearch
--   
-- -- create an adjacency list where the vertices are labeled with integers. -- --
--   graph :: Array Int [Int]
--   graph = array (0, 3) [(0, [1,2]), (1, [3]), (2, [3]), (3, [])]
--   
-- -- -- We need a data structure that instantiates Monoid to combine -- the results of our visitor functions. -- --
--   data Orderings = Orderings
--     {  enterV :: [Int]
--     ,  enterE :: [(Int, Int)]
--     ,  gray   :: [(Int, Int)]
--     ,  exitV  :: [Int]
--     ,  black  :: [(Int, Int)]
--     } deriving Show
--   
--   instance Monoid Orderings where
--    mempty = Orderings [] [] [] [] []
--    mappend (Orderings a1 a2 a3 a4 a5)(Orderings b1 b2 b3 b4 b5) =
--     Orderings (a1 ++ b1) (a2 ++ b2) (a3 ++ b3) (a4 ++ b4) (a5 ++ b5)
--   
-- -- The dfs function's first argument is of type GraphSearch -- which is a visitor containing the functions to be run at various times -- during the search. The second argument is the starting vertex for the -- search. -- --
--   orderings :: GraphSearch (AdjacencyList Int) Orderings
--   orderings = GraphSearch
--     (\v -> return $ mempty {enterV = [v]})
--     (\e -> return $ mempty {enterE = [e]})
--     (\e -> return $ mempty {gray   = [e]})
--     (\v -> return $ mempty {exitV  = [v]})
--     (\e -> return $ mempty {black  = [e]})
--   
-- -- Finally runAdjacencylist unwraps the function in the -- Adjacencylist newtype and runs it on graph. -- --
--   dfsTest :: Orderings
--   dfsTest = runAdjacencyList (dfs orderings 0) graph
--   
-- -- Running dfsTest in ghci will yield: -- --
--   Orderings {enterV = [0,2,3,1], enterE = [(0,2),(2,3),(0,1)], gray = [], exitV = [3,2,1,0], black = [(1,3)]}
--   
@package graphs @version 0.7.1 -- | Total transient monadic maps, used to track information about vertices -- and edges in a graph module Data.Graph.PropertyMap data PropertyMap m k v PropertyMap :: (k -> m v) -> (k -> v -> m (PropertyMap m k v)) -> PropertyMap m k v [getP] :: PropertyMap m k v -> k -> m v [putP] :: PropertyMap m k v -> k -> v -> m (PropertyMap m k v) modifyP :: Monad m => PropertyMap m k v -> k -> (v -> v) -> m (PropertyMap m k v) intPropertyMap :: Monad m => v -> PropertyMap m Int v propertyMap :: (Monad m, Ord k) => v -> PropertyMap m k v liftPropertyMap :: (MonadTrans t, Monad m, Monad (t m)) => PropertyMap m k v -> PropertyMap (t m) k v module Data.Graph.Class class (Monad g, Eq (Vertex g), Eq (Edge g)) => Graph g where { type family Vertex g :: *; type family Edge g :: *; } vertexMap :: Graph g => a -> g (VertexMap g a) edgeMap :: Graph g => a -> g (EdgeMap g a) type VertexMap g = PropertyMap g (Vertex g) type EdgeMap g = PropertyMap g (Edge g) liftVertexMap :: (MonadTrans t, Graph (t g), Graph g, Vertex (t g) ~ Vertex g) => a -> t g (VertexMap (t g) a) liftEdgeMap :: (MonadTrans t, Graph (t g), Graph g, Edge (t g) ~ Edge g) => a -> t g (EdgeMap (t g) a) instance Data.Graph.Class.Graph g => Data.Graph.Class.Graph (Control.Monad.Trans.State.Strict.StateT s g) instance Data.Graph.Class.Graph g => Data.Graph.Class.Graph (Control.Monad.Trans.State.Lazy.StateT s g) instance (Data.Graph.Class.Graph g, GHC.Base.Monoid m) => Data.Graph.Class.Graph (Control.Monad.Trans.Writer.Strict.WriterT m g) instance (Data.Graph.Class.Graph g, GHC.Base.Monoid m) => Data.Graph.Class.Graph (Control.Monad.Trans.Writer.Lazy.WriterT m g) instance Data.Graph.Class.Graph g => Data.Graph.Class.Graph (Control.Monad.Trans.Reader.ReaderT m g) instance Data.Graph.Class.Graph g => Data.Graph.Class.Graph (Control.Monad.Trans.Identity.IdentityT g) instance Data.Graph.Class.Graph g => Data.Graph.Class.Graph (Control.Monad.Trans.Maybe.MaybeT g) instance (Data.Graph.Class.Graph g, Control.Monad.Trans.Error.Error e) => Data.Graph.Class.Graph (Control.Monad.Trans.Error.ErrorT e g) instance (Data.Graph.Class.Graph g, GHC.Base.Monoid w) => Data.Graph.Class.Graph (Control.Monad.Trans.RWS.Lazy.RWST r w s g) instance (Data.Graph.Class.Graph g, GHC.Base.Monoid w) => Data.Graph.Class.Graph (Control.Monad.Trans.RWS.Strict.RWST r w s g) instance Data.Graph.Class.Graph Data.Functor.Identity.Identity module Data.Graph.Class.VertexEnumerable class Graph g => VertexEnumerableGraph g -- | O(v) vertices :: VertexEnumerableGraph g => g [Vertex g] instance Data.Graph.Class.VertexEnumerable.VertexEnumerableGraph g => Data.Graph.Class.VertexEnumerable.VertexEnumerableGraph (Control.Monad.Trans.State.Strict.StateT s g) instance Data.Graph.Class.VertexEnumerable.VertexEnumerableGraph g => Data.Graph.Class.VertexEnumerable.VertexEnumerableGraph (Control.Monad.Trans.State.Lazy.StateT s g) instance (Data.Graph.Class.VertexEnumerable.VertexEnumerableGraph g, GHC.Base.Monoid m) => Data.Graph.Class.VertexEnumerable.VertexEnumerableGraph (Control.Monad.Trans.Writer.Strict.WriterT m g) instance (Data.Graph.Class.VertexEnumerable.VertexEnumerableGraph g, GHC.Base.Monoid m) => Data.Graph.Class.VertexEnumerable.VertexEnumerableGraph (Control.Monad.Trans.Writer.Lazy.WriterT m g) instance (Data.Graph.Class.VertexEnumerable.VertexEnumerableGraph g, GHC.Base.Monoid m) => Data.Graph.Class.VertexEnumerable.VertexEnumerableGraph (Control.Monad.Trans.RWS.Strict.RWST r m s g) instance (Data.Graph.Class.VertexEnumerable.VertexEnumerableGraph g, GHC.Base.Monoid m) => Data.Graph.Class.VertexEnumerable.VertexEnumerableGraph (Control.Monad.Trans.RWS.Lazy.RWST r m s g) instance Data.Graph.Class.VertexEnumerable.VertexEnumerableGraph g => Data.Graph.Class.VertexEnumerable.VertexEnumerableGraph (Control.Monad.Trans.Maybe.MaybeT g) instance Data.Graph.Class.VertexEnumerable.VertexEnumerableGraph g => Data.Graph.Class.VertexEnumerable.VertexEnumerableGraph (Control.Monad.Trans.Identity.IdentityT g) instance (Data.Graph.Class.VertexEnumerable.VertexEnumerableGraph g, Control.Monad.Trans.Error.Error e) => Data.Graph.Class.VertexEnumerable.VertexEnumerableGraph (Control.Monad.Trans.Error.ErrorT e g) instance Data.Graph.Class.VertexEnumerable.VertexEnumerableGraph g => Data.Graph.Class.VertexEnumerable.VertexEnumerableGraph (Control.Monad.Trans.Reader.ReaderT m g) instance Data.Graph.Class.VertexEnumerable.VertexEnumerableGraph Data.Functor.Identity.Identity module Data.Graph.Class.EdgeEnumerable class Graph g => EdgeEnumerableGraph g -- | O(e) edges :: EdgeEnumerableGraph g => g [Edge g] instance Data.Graph.Class.EdgeEnumerable.EdgeEnumerableGraph g => Data.Graph.Class.EdgeEnumerable.EdgeEnumerableGraph (Control.Monad.Trans.State.Strict.StateT s g) instance Data.Graph.Class.EdgeEnumerable.EdgeEnumerableGraph g => Data.Graph.Class.EdgeEnumerable.EdgeEnumerableGraph (Control.Monad.Trans.State.Lazy.StateT s g) instance (Data.Graph.Class.EdgeEnumerable.EdgeEnumerableGraph g, GHC.Base.Monoid m) => Data.Graph.Class.EdgeEnumerable.EdgeEnumerableGraph (Control.Monad.Trans.Writer.Strict.WriterT m g) instance (Data.Graph.Class.EdgeEnumerable.EdgeEnumerableGraph g, GHC.Base.Monoid m) => Data.Graph.Class.EdgeEnumerable.EdgeEnumerableGraph (Control.Monad.Trans.Writer.Lazy.WriterT m g) instance (Data.Graph.Class.EdgeEnumerable.EdgeEnumerableGraph g, GHC.Base.Monoid m) => Data.Graph.Class.EdgeEnumerable.EdgeEnumerableGraph (Control.Monad.Trans.RWS.Strict.RWST r m s g) instance (Data.Graph.Class.EdgeEnumerable.EdgeEnumerableGraph g, GHC.Base.Monoid m) => Data.Graph.Class.EdgeEnumerable.EdgeEnumerableGraph (Control.Monad.Trans.RWS.Lazy.RWST r m s g) instance Data.Graph.Class.EdgeEnumerable.EdgeEnumerableGraph g => Data.Graph.Class.EdgeEnumerable.EdgeEnumerableGraph (Control.Monad.Trans.Maybe.MaybeT g) instance Data.Graph.Class.EdgeEnumerable.EdgeEnumerableGraph g => Data.Graph.Class.EdgeEnumerable.EdgeEnumerableGraph (Control.Monad.Trans.Identity.IdentityT g) instance (Data.Graph.Class.EdgeEnumerable.EdgeEnumerableGraph g, Control.Monad.Trans.Error.Error e) => Data.Graph.Class.EdgeEnumerable.EdgeEnumerableGraph (Control.Monad.Trans.Error.ErrorT e g) instance Data.Graph.Class.EdgeEnumerable.EdgeEnumerableGraph g => Data.Graph.Class.EdgeEnumerable.EdgeEnumerableGraph (Control.Monad.Trans.Reader.ReaderT e g) instance Data.Graph.Class.EdgeEnumerable.EdgeEnumerableGraph Data.Functor.Identity.Identity module Data.Graph.Class.AdjacencyMatrix class Graph g => AdjacencyMatrixGraph g edge :: AdjacencyMatrixGraph g => Vertex g -> Vertex g -> g (Maybe (Edge g)) instance Data.Graph.Class.AdjacencyMatrix.AdjacencyMatrixGraph g => Data.Graph.Class.AdjacencyMatrix.AdjacencyMatrixGraph (Control.Monad.Trans.State.Strict.StateT s g) instance Data.Graph.Class.AdjacencyMatrix.AdjacencyMatrixGraph g => Data.Graph.Class.AdjacencyMatrix.AdjacencyMatrixGraph (Control.Monad.Trans.State.Lazy.StateT s g) instance (Data.Graph.Class.AdjacencyMatrix.AdjacencyMatrixGraph g, GHC.Base.Monoid m) => Data.Graph.Class.AdjacencyMatrix.AdjacencyMatrixGraph (Control.Monad.Trans.Writer.Strict.WriterT m g) instance (Data.Graph.Class.AdjacencyMatrix.AdjacencyMatrixGraph g, GHC.Base.Monoid m) => Data.Graph.Class.AdjacencyMatrix.AdjacencyMatrixGraph (Control.Monad.Trans.Writer.Lazy.WriterT m g) instance (Data.Graph.Class.AdjacencyMatrix.AdjacencyMatrixGraph g, GHC.Base.Monoid m) => Data.Graph.Class.AdjacencyMatrix.AdjacencyMatrixGraph (Control.Monad.Trans.RWS.Strict.RWST r m s g) instance (Data.Graph.Class.AdjacencyMatrix.AdjacencyMatrixGraph g, GHC.Base.Monoid m) => Data.Graph.Class.AdjacencyMatrix.AdjacencyMatrixGraph (Control.Monad.Trans.RWS.Lazy.RWST r m s g) instance Data.Graph.Class.AdjacencyMatrix.AdjacencyMatrixGraph g => Data.Graph.Class.AdjacencyMatrix.AdjacencyMatrixGraph (Control.Monad.Trans.Maybe.MaybeT g) instance (Data.Graph.Class.AdjacencyMatrix.AdjacencyMatrixGraph g, Control.Monad.Trans.Error.Error e) => Data.Graph.Class.AdjacencyMatrix.AdjacencyMatrixGraph (Control.Monad.Trans.Error.ErrorT e g) instance Data.Graph.Class.AdjacencyMatrix.AdjacencyMatrixGraph g => Data.Graph.Class.AdjacencyMatrix.AdjacencyMatrixGraph (Control.Monad.Trans.Identity.IdentityT g) instance Data.Graph.Class.AdjacencyMatrix.AdjacencyMatrixGraph g => Data.Graph.Class.AdjacencyMatrix.AdjacencyMatrixGraph (Control.Monad.Trans.Reader.ReaderT e g) instance Data.Graph.Class.AdjacencyMatrix.AdjacencyMatrixGraph Data.Functor.Identity.Identity module Data.Graph.Class.AdjacencyList -- | Minimal definition: source, target, and either -- adjacentVertices with outEdges = -- defaultOutEdges or outEdges class Graph g => AdjacencyListGraph g source :: AdjacencyListGraph g => Edge g -> g (Vertex g) target :: AdjacencyListGraph g => Edge g -> g (Vertex g) outEdges :: AdjacencyListGraph g => Vertex g -> g [Edge g] outDegree :: AdjacencyListGraph g => Vertex g -> g Int adjacentVertices :: AdjacencyListGraph g => Vertex g -> g [Vertex g] defaultOutEdges :: AdjacencyListGraph g => Vertex g -> g [(Vertex g, Vertex g)] instance Data.Graph.Class.AdjacencyList.AdjacencyListGraph g => Data.Graph.Class.AdjacencyList.AdjacencyListGraph (Control.Monad.Trans.State.Strict.StateT s g) instance Data.Graph.Class.AdjacencyList.AdjacencyListGraph g => Data.Graph.Class.AdjacencyList.AdjacencyListGraph (Control.Monad.Trans.State.Lazy.StateT s g) instance (Data.Graph.Class.AdjacencyList.AdjacencyListGraph g, GHC.Base.Monoid m) => Data.Graph.Class.AdjacencyList.AdjacencyListGraph (Control.Monad.Trans.Writer.Strict.WriterT m g) instance (Data.Graph.Class.AdjacencyList.AdjacencyListGraph g, GHC.Base.Monoid m) => Data.Graph.Class.AdjacencyList.AdjacencyListGraph (Control.Monad.Trans.Writer.Lazy.WriterT m g) instance (Data.Graph.Class.AdjacencyList.AdjacencyListGraph g, GHC.Base.Monoid m) => Data.Graph.Class.AdjacencyList.AdjacencyListGraph (Control.Monad.Trans.RWS.Strict.RWST r m s g) instance (Data.Graph.Class.AdjacencyList.AdjacencyListGraph g, GHC.Base.Monoid m) => Data.Graph.Class.AdjacencyList.AdjacencyListGraph (Control.Monad.Trans.RWS.Lazy.RWST r m s g) instance Data.Graph.Class.AdjacencyList.AdjacencyListGraph g => Data.Graph.Class.AdjacencyList.AdjacencyListGraph (Control.Monad.Trans.Reader.ReaderT e g) instance (Data.Graph.Class.AdjacencyList.AdjacencyListGraph g, Control.Monad.Trans.Error.Error e) => Data.Graph.Class.AdjacencyList.AdjacencyListGraph (Control.Monad.Trans.Error.ErrorT e g) instance Data.Graph.Class.AdjacencyList.AdjacencyListGraph g => Data.Graph.Class.AdjacencyList.AdjacencyListGraph (Control.Monad.Trans.Maybe.MaybeT g) instance Data.Graph.Class.AdjacencyList.AdjacencyListGraph g => Data.Graph.Class.AdjacencyList.AdjacencyListGraph (Control.Monad.Trans.Identity.IdentityT g) instance Data.Graph.Class.AdjacencyList.AdjacencyListGraph Data.Functor.Identity.Identity module Data.Graph.Class.Bidirectional class AdjacencyListGraph g => BidirectionalGraph g inEdges :: BidirectionalGraph g => Vertex g -> g [Edge g] inDegree :: BidirectionalGraph g => Vertex g -> g Int incidentEdges :: BidirectionalGraph g => Vertex g -> g [Edge g] degree :: BidirectionalGraph g => Vertex g -> g Int instance Data.Graph.Class.Bidirectional.BidirectionalGraph g => Data.Graph.Class.Bidirectional.BidirectionalGraph (Control.Monad.Trans.State.Strict.StateT s g) instance Data.Graph.Class.Bidirectional.BidirectionalGraph g => Data.Graph.Class.Bidirectional.BidirectionalGraph (Control.Monad.Trans.State.Lazy.StateT s g) instance (Data.Graph.Class.Bidirectional.BidirectionalGraph g, GHC.Base.Monoid m) => Data.Graph.Class.Bidirectional.BidirectionalGraph (Control.Monad.Trans.Writer.Strict.WriterT m g) instance (Data.Graph.Class.Bidirectional.BidirectionalGraph g, GHC.Base.Monoid m) => Data.Graph.Class.Bidirectional.BidirectionalGraph (Control.Monad.Trans.Writer.Lazy.WriterT m g) instance (Data.Graph.Class.Bidirectional.BidirectionalGraph g, GHC.Base.Monoid m) => Data.Graph.Class.Bidirectional.BidirectionalGraph (Control.Monad.Trans.RWS.Strict.RWST r m s g) instance (Data.Graph.Class.Bidirectional.BidirectionalGraph g, GHC.Base.Monoid m) => Data.Graph.Class.Bidirectional.BidirectionalGraph (Control.Monad.Trans.RWS.Lazy.RWST r m s g) instance Data.Graph.Class.Bidirectional.BidirectionalGraph g => Data.Graph.Class.Bidirectional.BidirectionalGraph (Control.Monad.Trans.Reader.ReaderT e g) instance Data.Graph.Class.Bidirectional.BidirectionalGraph g => Data.Graph.Class.Bidirectional.BidirectionalGraph (Control.Monad.Trans.Identity.IdentityT g) instance Data.Graph.Class.Bidirectional.BidirectionalGraph g => Data.Graph.Class.Bidirectional.BidirectionalGraph (Control.Monad.Trans.Maybe.MaybeT g) instance (Data.Graph.Class.Bidirectional.BidirectionalGraph g, Control.Monad.Trans.Error.Error e) => Data.Graph.Class.Bidirectional.BidirectionalGraph (Control.Monad.Trans.Error.ErrorT e g) instance Data.Graph.Class.Bidirectional.BidirectionalGraph Data.Functor.Identity.Identity module Data.Graph.Dual newtype Dual g a Dual :: g a -> Dual g a [runDual] :: Dual g a -> g a instance Control.Monad.Trans.Class.MonadTrans Data.Graph.Dual.Dual instance GHC.Base.Functor g => GHC.Base.Functor (Data.Graph.Dual.Dual g) instance GHC.Base.Applicative g => GHC.Base.Applicative (Data.Graph.Dual.Dual g) instance GHC.Base.Monad g => GHC.Base.Monad (Data.Graph.Dual.Dual g) instance Data.Graph.Class.Graph g => Data.Graph.Class.Graph (Data.Graph.Dual.Dual g) instance Data.Graph.Class.AdjacencyMatrix.AdjacencyMatrixGraph g => Data.Graph.Class.AdjacencyMatrix.AdjacencyMatrixGraph (Data.Graph.Dual.Dual g) instance Data.Graph.Class.Bidirectional.BidirectionalGraph g => Data.Graph.Class.AdjacencyList.AdjacencyListGraph (Data.Graph.Dual.Dual g) instance Data.Graph.Class.Bidirectional.BidirectionalGraph g => Data.Graph.Class.Bidirectional.BidirectionalGraph (Data.Graph.Dual.Dual g) instance Data.Graph.Class.EdgeEnumerable.EdgeEnumerableGraph g => Data.Graph.Class.EdgeEnumerable.EdgeEnumerableGraph (Data.Graph.Dual.Dual g) instance Data.Graph.Class.VertexEnumerable.VertexEnumerableGraph g => Data.Graph.Class.VertexEnumerable.VertexEnumerableGraph (Data.Graph.Dual.Dual g) -- | Functions and data structures common to graph search algorithms module Data.Graph.Algorithm -- | Graph search visitor data GraphSearch g m GraphSearch :: (Vertex g -> g m) -> (Edge g -> g m) -> (Edge g -> g m) -> (Vertex g -> g m) -> (Edge g -> g m) -> GraphSearch g m -- | Called the first time a vertex is discovered [enterVertex] :: GraphSearch g m -> Vertex g -> g m -- | Called the first time an edge is discovered, before enterVertex [enterEdge] :: GraphSearch g m -> Edge g -> g m -- | Called when we encounter a back edge to a vertex we're still -- processing [grayTarget] :: GraphSearch g m -> Edge g -> g m -- | Called once we have processed all descendants of a vertex [exitVertex] :: GraphSearch g m -> Vertex g -> g m -- | Called when we encounter a cross edge to a vertex we've already -- finished [blackTarget] :: GraphSearch g m -> Edge g -> g m instance Data.Graph.Class.Graph g => GHC.Base.Functor (Data.Graph.Algorithm.GraphSearch g) instance Data.Graph.Class.Graph g => GHC.Base.Applicative (Data.Graph.Algorithm.GraphSearch g) instance Data.Graph.Class.Graph g => GHC.Base.Monad (Data.Graph.Algorithm.GraphSearch g) instance (Data.Graph.Class.Graph g, Data.Semigroup.Semigroup m) => Data.Semigroup.Semigroup (Data.Graph.Algorithm.GraphSearch g m) instance (Data.Graph.Class.Graph g, GHC.Base.Monoid m) => GHC.Base.Monoid (Data.Graph.Algorithm.GraphSearch g m) -- | Depth-first search module Data.Graph.Algorithm.DepthFirstSearch dfs :: (AdjacencyListGraph g, Monoid m) => GraphSearch g m -> Vertex g -> g m -- | Breadth-first search module Data.Graph.Algorithm.BreadthFirstSearch bfs :: (AdjacencyListGraph g, Monoid m) => GraphSearch g m -> Vertex g -> g m module Data.Graph.AdjacencyMatrix newtype AdjacencyMatrix arr i a AdjacencyMatrix :: (arr (i, i) Bool -> a) -> AdjacencyMatrix arr i a [runAdjacencyMatrix] :: AdjacencyMatrix arr i a -> arr (i, i) Bool -> a class Graph g => AdjacencyMatrixGraph g ask :: AdjacencyMatrix arr i (arr (i, i) Bool) instance GHC.Base.Functor (Data.Graph.AdjacencyMatrix.AdjacencyMatrix arr i) instance GHC.Base.Applicative (Data.Graph.AdjacencyMatrix.AdjacencyMatrix arr i) instance GHC.Base.Monad (Data.Graph.AdjacencyMatrix.AdjacencyMatrix arr i) instance GHC.Classes.Ord i => Data.Graph.Class.Graph (Data.Graph.AdjacencyMatrix.AdjacencyMatrix arr i) instance (Data.Array.Base.IArray arr GHC.Types.Bool, GHC.Arr.Ix i) => Data.Graph.Class.AdjacencyMatrix.AdjacencyMatrixGraph (Data.Graph.AdjacencyMatrix.AdjacencyMatrix arr i) module Data.Graph.AdjacencyList newtype AdjacencyList i a AdjacencyList :: (Array i [i] -> a) -> AdjacencyList i a [runAdjacencyList] :: AdjacencyList i a -> Array i [i] -> a -- | Minimal definition: source, target, and either -- adjacentVertices with outEdges = -- defaultOutEdges or outEdges class Graph g => AdjacencyListGraph g ask :: AdjacencyList i (Array i [i]) instance GHC.Base.Functor (Data.Graph.AdjacencyList.AdjacencyList i) instance GHC.Base.Applicative (Data.Graph.AdjacencyList.AdjacencyList i) instance GHC.Base.Monad (Data.Graph.AdjacencyList.AdjacencyList i) instance GHC.Classes.Ord i => Data.Graph.Class.Graph (Data.Graph.AdjacencyList.AdjacencyList i) instance GHC.Arr.Ix i => Data.Graph.Class.AdjacencyList.AdjacencyListGraph (Data.Graph.AdjacencyList.AdjacencyList i)