Safe Haskell | Safe |
---|---|
Language | Haskell2010 |
This module provides ability to inspect graph data in a specialized monad.
Examples:
let example1 = reversibleCompleteG ["a","b","c"] (\a b -> (a ++ b, b ++ a))
show example1 == "([a, b, c] ; [aa = a <-> a, ba / ab = b <-> a, bb = b <-> b, ca / ac = c <-> a, cb / bc = c <-> b, cc = c <-> c])"
example1 `inGraphM` edgesEndingToM "a" == return (fromList ["aa","ba","ca"])
example1 `inGraphM` verticesM == return (fromList ["a","b","c"])
example1 `inGraphM` edgesM == return (fromList ["aa","ab","ac","ba","bb","bc","ca","cb","cc"])
example1 `inGraphM` do { x <- sourceM "ab" ; y <- targetM "ab" ; return (x,y) } == return ("a","b")
Synopsis
- newtype InGraphM mon e m a = InGraphM {
- runInGraphM :: ReaderT (Graph mon e) m a
- inGraphM_bind :: Monad m => InGraphM mon e m a -> (a -> InGraphM mon e m b) -> InGraphM mon e m b
- inGraphM_return :: Monad m => a -> InGraphM mon e m a
- inGraphM :: Graph mon e -> InGraphM mon e m a -> m a
- currentGraphM :: Monad m => InGraphM mon e m (Graph mon e)
- actM :: Monad m => e -> mon Bool Bool -> InGraphM mon e m e
- actSetM :: (Monad m, Ord e) => Set e -> mon Bool Bool -> InGraphM mon e m (Set e)
- elementsM :: (Monad m, Ord e) => InGraphM mon e m (Set e)
- borderM :: (GraphMonoid mon Bool, Monad m) => e -> InGraphM mon e m (e, e)
- reversibleBorderM :: (ReversibleGraphMonoid mon Bool, Monad m, Ord e) => e -> InGraphM mon e m (e, e)
- verticesM :: (Ord e, GraphMonoid mon Bool, Monad m) => InGraphM mon e m (Set e)
- edgesM :: (Ord e, GraphMonoid mon Bool, Monad m) => InGraphM mon e m (Set e)
- nodesLinkedFromM :: (Monad m, Ord e, GraphMonoid mon Bool) => e -> InGraphM mon e m (Set e)
- edgesStartingFromM :: (Monad m, Ord e, GraphMonoid mon Bool) => e -> InGraphM mon e m (Set e)
- edgesEndingToM :: (Monad m, Ord e, GraphMonoid mon Bool) => e -> InGraphM mon e m (Set e)
- linksM :: (Monad m, Ord e, GraphMonoid mon Bool) => InGraphM mon e m (Set (e, e, e))
- reversibleLinksM :: (Monad m, Ord e, ReversibleGraphMonoid mon Bool) => InGraphM mon e m (Set ((e, e), (e, e)))
- sourceM :: (GraphMonoid mon Bool, Monad m) => e -> InGraphM mon e m e
- targetM :: (GraphMonoid mon Bool, Monad m) => e -> InGraphM mon e m e
- inverseM :: (ReversibleGraphMonoid mon Bool, Monad m) => e -> InGraphM mon e m e
- isSourceVertexM :: (GraphMonoid mon Bool, Monad m, Eq e) => e -> InGraphM mon e m Bool
- isTargetVertexM :: (GraphMonoid mon Bool, Monad m, Eq e) => e -> InGraphM mon e m Bool
- isVertexM :: (GraphMonoid mon Bool, Monad m, Eq e) => e -> InGraphM mon e m Bool
- isEdgeM :: (GraphMonoid mon Bool, Monad m, Eq e) => e -> InGraphM mon e m Bool
- hasPathM :: (GraphMonoid mon Bool, Monad m, Eq e) => [e] -> InGraphM mon e m Bool
- isEdgeBetweenM :: (Monad m, GraphMonoid mon Bool, Eq e) => e -> e -> e -> InGraphM mon e m Bool
- isLoopM :: (Eq e, Monad m, GraphMonoid mon Bool) => e -> InGraphM mon e m Bool
- isOneLaneLoopM :: (Eq e, Monad m, ReversibleGraphMonoid mon Bool) => e -> InGraphM mon e m Bool
- isBandM :: (Eq e, Monad m, ReversibleGraphMonoid mon Bool) => e -> InGraphM mon e m Bool
- liftReaderGraph :: (Monad m, MonadTrans t, MonadReader (Graph mon e) (t m)) => InGraphM mon e m a -> t m a
Documentation
newtype InGraphM mon e m a Source #
InGraphM | |
|
Instances
inGraphM_bind :: Monad m => InGraphM mon e m a -> (a -> InGraphM mon e m b) -> InGraphM mon e m b Source #
inGraphM_return :: Monad m => a -> InGraphM mon e m a Source #
reversibleBorderM :: (ReversibleGraphMonoid mon Bool, Monad m, Ord e) => e -> InGraphM mon e m (e, e) Source #
nodesLinkedFromM :: (Monad m, Ord e, GraphMonoid mon Bool) => e -> InGraphM mon e m (Set e) Source #
edgesStartingFromM :: (Monad m, Ord e, GraphMonoid mon Bool) => e -> InGraphM mon e m (Set e) Source #
edgesEndingToM :: (Monad m, Ord e, GraphMonoid mon Bool) => e -> InGraphM mon e m (Set e) Source #
reversibleLinksM :: (Monad m, Ord e, ReversibleGraphMonoid mon Bool) => InGraphM mon e m (Set ((e, e), (e, e))) Source #
isSourceVertexM :: (GraphMonoid mon Bool, Monad m, Eq e) => e -> InGraphM mon e m Bool Source #
isTargetVertexM :: (GraphMonoid mon Bool, Monad m, Eq e) => e -> InGraphM mon e m Bool Source #
equally valid implementation. These are equivalent in normal graphs
because Bool -> Bool structure has 4 elements, which are related by
not
operation which switches source and target. From
Lawvere,Rosebrugh: Sets for Mathematics, Exercise 10.29. Note however
that we are not requiring ReversibleGraphMonoid, which actually
contains this not
operation. This is a reason to separate these
three operations (isSourceVertexM, isTargetVertexM, isVertexM) when
digraphs are used.
The left action of the monoid causes the following constraints: In particular, these are valid when the monoid is on the two-element set:
source . target == source
target . source == target
source . source == source
target . target == target
Due to the first two, it's not necessary to distinguish these operations.
isEdgeBetweenM :: (Monad m, GraphMonoid mon Bool, Eq e) => e -> e -> e -> InGraphM mon e m Bool Source #
isOneLaneLoopM :: (Eq e, Monad m, ReversibleGraphMonoid mon Bool) => e -> InGraphM mon e m Bool Source #
liftReaderGraph :: (Monad m, MonadTrans t, MonadReader (Graph mon e) (t m)) => InGraphM mon e m a -> t m a Source #
Orphan instances
(Ord a, GraphMonoid m Bool) => Visitor (Graph m a) Source # | |
(Monad m, Ord e, GraphMonoid mon Bool) => GraphMonad (ReaderT (Graph mon e) m) e Source # | |
gisVertex :: e -> ReaderT (Graph mon e) m Bool Source # gsource :: e -> ReaderT (Graph mon e) m e Source # gtarget :: e -> ReaderT (Graph mon e) m e Source # gelements :: ReaderT (Graph mon e) m (Set e) Source # gvertices :: ReaderT (Graph mon e) m (Set e) Source # gedges :: ReaderT (Graph mon e) m (Set e) Source # gedgesStartingFrom :: e -> ReaderT (Graph mon e) m (Set e) Source # gedgesEndingTo :: e -> ReaderT (Graph mon e) m (Set e) Source # glinks :: ReaderT (Graph mon e) m (Set (e, e, e)) Source # gloops :: ReaderT (Graph mon e) m (Set e) Source # gisLoop :: e -> ReaderT (Graph mon e) m Bool Source # gisEdgeBetween :: e -> e -> e -> ReaderT (Graph mon e) m Bool Source # | |
(Monad m, Ord e, ReversibleGraphMonoid mon Bool) => ReversibleGraphMonad (ReaderT (Graph mon e) m) e Source # | |