-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | A simple monadic graph library
--
-- A simple monadic graph library
@package graphs
@version 0.5
-- | 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 Graph Identity
instance (Graph g, Monoid w) => Graph (RWST r w s g)
instance (Graph g, Monoid w) => Graph (RWST r w s g)
instance (Graph g, Error e) => Graph (ErrorT e g)
instance Graph g => Graph (MaybeT g)
instance Graph g => Graph (IdentityT g)
instance Graph g => Graph (ReaderT m g)
instance (Graph g, Monoid m) => Graph (WriterT m g)
instance (Graph g, Monoid m) => Graph (WriterT m g)
instance Graph g => Graph (StateT s g)
instance Graph g => Graph (StateT s g)
module Data.Graph.Class.AdjacencyList
-- | Minimal definition: source, target, and either
-- adjacentVertices with outEdges =
-- defaultOutEdges or outEdges
class Graph g => AdjacencyListGraph g where outDegree v = liftM length (outEdges v) adjacentVertices = outEdges >=> mapM target
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 AdjacencyListGraph Identity
instance AdjacencyListGraph g => AdjacencyListGraph (IdentityT g)
instance AdjacencyListGraph g => AdjacencyListGraph (MaybeT g)
instance (AdjacencyListGraph g, Error e) => AdjacencyListGraph (ErrorT e g)
instance AdjacencyListGraph g => AdjacencyListGraph (ReaderT e g)
instance (AdjacencyListGraph g, Monoid m) => AdjacencyListGraph (RWST r m s g)
instance (AdjacencyListGraph g, Monoid m) => AdjacencyListGraph (RWST r m s g)
instance (AdjacencyListGraph g, Monoid m) => AdjacencyListGraph (WriterT m g)
instance (AdjacencyListGraph g, Monoid m) => AdjacencyListGraph (WriterT m g)
instance AdjacencyListGraph g => AdjacencyListGraph (StateT s g)
instance AdjacencyListGraph g => AdjacencyListGraph (StateT s g)
module Data.Graph.Class.Bidirectional
class AdjacencyListGraph g => BidirectionalGraph g where inDegree v = length `liftM` inEdges v incidentEdges v = liftM2 (++) (inEdges v) (outEdges v) degree v = liftM2 (+) (inDegree v) (outDegree v)
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 BidirectionalGraph Identity
instance (BidirectionalGraph g, Error e) => BidirectionalGraph (ErrorT e g)
instance BidirectionalGraph g => BidirectionalGraph (MaybeT g)
instance BidirectionalGraph g => BidirectionalGraph (IdentityT g)
instance BidirectionalGraph g => BidirectionalGraph (ReaderT e g)
instance (BidirectionalGraph g, Monoid m) => BidirectionalGraph (RWST r m s g)
instance (BidirectionalGraph g, Monoid m) => BidirectionalGraph (RWST r m s g)
instance (BidirectionalGraph g, Monoid m) => BidirectionalGraph (WriterT m g)
instance (BidirectionalGraph g, Monoid m) => BidirectionalGraph (WriterT m g)
instance BidirectionalGraph g => BidirectionalGraph (StateT s g)
instance BidirectionalGraph g => BidirectionalGraph (StateT s g)
module Data.Graph.Class.AdjacencyMatrix
class Graph g => AdjacencyMatrixGraph g
edge :: AdjacencyMatrixGraph g => Vertex g -> Vertex g -> g (Maybe (Edge g))
instance AdjacencyMatrixGraph Identity
instance AdjacencyMatrixGraph g => AdjacencyMatrixGraph (ReaderT e g)
instance AdjacencyMatrixGraph g => AdjacencyMatrixGraph (IdentityT g)
instance (AdjacencyMatrixGraph g, Error e) => AdjacencyMatrixGraph (ErrorT e g)
instance AdjacencyMatrixGraph g => AdjacencyMatrixGraph (MaybeT g)
instance (AdjacencyMatrixGraph g, Monoid m) => AdjacencyMatrixGraph (RWST r m s g)
instance (AdjacencyMatrixGraph g, Monoid m) => AdjacencyMatrixGraph (RWST r m s g)
instance (AdjacencyMatrixGraph g, Monoid m) => AdjacencyMatrixGraph (WriterT m g)
instance (AdjacencyMatrixGraph g, Monoid m) => AdjacencyMatrixGraph (WriterT m g)
instance AdjacencyMatrixGraph g => AdjacencyMatrixGraph (StateT s g)
instance AdjacencyMatrixGraph g => AdjacencyMatrixGraph (StateT s g)
module Data.Graph.Class.EdgeEnumerable
class Graph g => EdgeEnumerableGraph g
edges :: EdgeEnumerableGraph g => g [Edge g]
instance EdgeEnumerableGraph Identity
instance EdgeEnumerableGraph g => EdgeEnumerableGraph (ReaderT e g)
instance (EdgeEnumerableGraph g, Error e) => EdgeEnumerableGraph (ErrorT e g)
instance EdgeEnumerableGraph g => EdgeEnumerableGraph (IdentityT g)
instance EdgeEnumerableGraph g => EdgeEnumerableGraph (MaybeT g)
instance (EdgeEnumerableGraph g, Monoid m) => EdgeEnumerableGraph (RWST r m s g)
instance (EdgeEnumerableGraph g, Monoid m) => EdgeEnumerableGraph (RWST r m s g)
instance (EdgeEnumerableGraph g, Monoid m) => EdgeEnumerableGraph (WriterT m g)
instance (EdgeEnumerableGraph g, Monoid m) => EdgeEnumerableGraph (WriterT m g)
instance EdgeEnumerableGraph g => EdgeEnumerableGraph (StateT s g)
instance EdgeEnumerableGraph g => EdgeEnumerableGraph (StateT s g)
module Data.Graph.Class.VertexEnumerable
class Graph g => VertexEnumerableGraph g
vertices :: VertexEnumerableGraph g => g [Vertex g]
instance VertexEnumerableGraph Identity
instance VertexEnumerableGraph g => VertexEnumerableGraph (ReaderT m g)
instance (VertexEnumerableGraph g, Error e) => VertexEnumerableGraph (ErrorT e g)
instance VertexEnumerableGraph g => VertexEnumerableGraph (IdentityT g)
instance VertexEnumerableGraph g => VertexEnumerableGraph (MaybeT g)
instance (VertexEnumerableGraph g, Monoid m) => VertexEnumerableGraph (RWST r m s g)
instance (VertexEnumerableGraph g, Monoid m) => VertexEnumerableGraph (RWST r m s g)
instance (VertexEnumerableGraph g, Monoid m) => VertexEnumerableGraph (WriterT m g)
instance (VertexEnumerableGraph g, Monoid m) => VertexEnumerableGraph (WriterT m g)
instance VertexEnumerableGraph g => VertexEnumerableGraph (StateT s g)
instance VertexEnumerableGraph g => VertexEnumerableGraph (StateT s g)
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 (IArray arr Bool, Ix i) => AdjacencyMatrixGraph (AdjacencyMatrix arr i)
instance Ord i => Graph (AdjacencyMatrix arr i)
instance Monad (AdjacencyMatrix arr i)
instance Applicative (AdjacencyMatrix arr i)
instance Functor (AdjacencyMatrix arr i)
-- | Depth-first search
module Data.Graph.Algorithm.DepthFirstSearch
dfs :: (AdjacencyListGraph g, Monoid m) => Dfs g m -> Vertex g -> g m
data Dfs g m
Dfs :: (Vertex g -> g m) -> (Edge g -> g m) -> (Edge g -> g m) -> (Vertex g -> g m) -> (Edge g -> g m) -> Dfs g m
enterVertex :: Dfs g m -> Vertex g -> g m
enterEdge :: Dfs g m -> Edge g -> g m
grayTarget :: Dfs g m -> Edge g -> g m
exitVertex :: Dfs g m -> Vertex g -> g m
blackTarget :: Dfs g m -> Edge g -> g m
instance (Graph g, Monoid m) => Monoid (Dfs g m)
instance Graph g => Monad (Dfs g)
instance Graph g => Applicative (Dfs g)
instance Graph g => Functor (Dfs g)
-- | Breadth-first search
module Data.Graph.Algorithm.BreadthFirstSearch
bfs :: (AdjacencyListGraph g, Monoid m) => Bfs g m -> Vertex g -> g m
-- | Breadth first search visitor
data Bfs g m
Bfs :: (Vertex g -> g m) -> (Edge g -> g m) -> (Edge g -> g m) -> (Vertex g -> g m) -> (Edge g -> g m) -> Bfs g m
enterVertex :: Bfs g m -> Vertex g -> g m
enterEdge :: Bfs g m -> Edge g -> g m
grayTarget :: Bfs g m -> Edge g -> g m
exitVertex :: Bfs g m -> Vertex g -> g m
blackTarget :: Bfs g m -> Edge g -> g m
instance (Graph g, Monoid m) => Monoid (Bfs g m)
instance Graph g => Monad (Bfs g)
instance Graph g => Applicative (Bfs g)
instance Graph g => Functor (Bfs g)
module Data.Graph.Dual
newtype Dual g a
Dual :: g a -> Dual g a
runDual :: Dual g a -> g a
instance VertexEnumerableGraph g => VertexEnumerableGraph (Dual g)
instance EdgeEnumerableGraph g => EdgeEnumerableGraph (Dual g)
instance BidirectionalGraph g => BidirectionalGraph (Dual g)
instance BidirectionalGraph g => AdjacencyListGraph (Dual g)
instance AdjacencyMatrixGraph g => AdjacencyMatrixGraph (Dual g)
instance Graph g => Graph (Dual g)
instance Monad g => Monad (Dual g)
instance Applicative g => Applicative (Dual g)
instance Functor g => Functor (Dual g)
instance MonadTrans Dual
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 where outDegree v = liftM length (outEdges v) adjacentVertices = outEdges >=> mapM target
ask :: AdjacencyList i (Array i [i])
instance Ix i => AdjacencyListGraph (AdjacencyList i)
instance Ord i => Graph (AdjacencyList i)
instance Monad (AdjacencyList i)
instance Applicative (AdjacencyList i)
instance Functor (AdjacencyList i)