-- 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 <a>Boost Graph Library</a>.
--   
--   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,
--   
--   <pre>
--   import Data.Array
--   import Data.Monoid
--   import Data.Graph.AdjacencyList
--   import Data.Graph.Algorithm
--   import Data.Graph.Algorithm.DepthFirstSearch
--   </pre>
--   
--   create an adjacency list where the vertices are labeled with integers.
--   
--   <pre>
--   graph :: Array Int [Int]
--   graph = array (0, 3) [(0, [1,2]), (1, [3]), (2, [3]), (3, [])]
--   </pre>
--   
--   
--   We need a data structure that instantiates <a>Monoid</a> to combine
--   the results of our visitor functions.
--   
--   <pre>
--   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)
--   </pre>
--   
--   The <a>dfs</a> function's first argument is of type <a>GraphSearch</a>
--   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.
--   
--   <pre>
--   orderings :: GraphSearch (AdjacencyList Int) Orderings
--   orderings = GraphSearch
--     (\v -&gt; return $ mempty {enterV = [v]})
--     (\e -&gt; return $ mempty {enterE = [e]})
--     (\e -&gt; return $ mempty {gray   = [e]})
--     (\v -&gt; return $ mempty {exitV  = [v]})
--     (\e -&gt; return $ mempty {black  = [e]})
--   </pre>
--   
--   Finally <a>runAdjacencylist</a> unwraps the function in the
--   <a>Adjacencylist</a> newtype and runs it on <a>graph</a>.
--   
--   <pre>
--   dfsTest :: Orderings
--   dfsTest = runAdjacencyList (dfs orderings 0) graph
--   </pre>
--   
--   Running <a>dfsTest</a> in ghci will yield:
--   
--   <pre>
--   Orderings {enterV = [0,2,3,1], enterE = [(0,2),(2,3),(0,1)], gray = [], exitV = [3,2,1,0], black = [(1,3)]}
--   </pre>
@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

-- | <i>O(v)</i>
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

-- | <i>O(e)</i>
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: <a>source</a>, <a>target</a>, and either
--   <a>adjacentVertices</a> with <tt><a>outEdges</a> =
--   <a>defaultOutEdges</a></tt> or <a>outEdges</a>
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, GHC.Base.Semigroup m) => GHC.Base.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: <a>source</a>, <a>target</a>, and either
--   <a>adjacentVertices</a> with <tt><a>outEdges</a> =
--   <a>defaultOutEdges</a></tt> or <a>outEdges</a>
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)
