cifl-math-library-1.1.1.0: Math libraries
Safe HaskellSafe
LanguageHaskell2010

Math.Graph.InGraphMonad

Description

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

Documentation

newtype InGraphM mon e m a Source #

Constructors

InGraphM 

Fields

Instances

Instances details
MonadWriter w m => MonadWriter w (InGraphM mon e m) Source # 
Instance details

Defined in Math.Graph.InGraphMonad

Methods

writer :: (a, w) -> InGraphM mon e m a #

tell :: w -> InGraphM mon e m () #

listen :: InGraphM mon e m a -> InGraphM mon e m (a, w) #

pass :: InGraphM mon e m (a, w -> w) -> InGraphM mon e m a #

MonadTrans (InGraphM mon e) Source # 
Instance details

Defined in Math.Graph.InGraphMonad

Methods

lift :: Monad m => m a -> InGraphM mon e m a #

Monad m => MonadReader (Graph mon e) (InGraphM mon e m) Source # 
Instance details

Defined in Math.Graph.InGraphMonad

Methods

ask :: InGraphM mon e m (Graph mon e) #

local :: (Graph mon e -> Graph mon e) -> InGraphM mon e m a -> InGraphM mon e m a #

reader :: (Graph mon e -> a) -> InGraphM mon e m a #

MonadIO m => MonadIO (InGraphM mon e m) Source # 
Instance details

Defined in Math.Graph.InGraphMonad

Methods

liftIO :: IO a -> InGraphM mon e m a #

Applicative m => Applicative (InGraphM mon e m) Source # 
Instance details

Defined in Math.Graph.InGraphMonad

Methods

pure :: a -> InGraphM mon e m a #

(<*>) :: InGraphM mon e m (a -> b) -> InGraphM mon e m a -> InGraphM mon e m b #

liftA2 :: (a -> b -> c) -> InGraphM mon e m a -> InGraphM mon e m b -> InGraphM mon e m c #

(*>) :: InGraphM mon e m a -> InGraphM mon e m b -> InGraphM mon e m b #

(<*) :: InGraphM mon e m a -> InGraphM mon e m b -> InGraphM mon e m a #

Functor m => Functor (InGraphM mon e m) Source # 
Instance details

Defined in Math.Graph.InGraphMonad

Methods

fmap :: (a -> b) -> InGraphM mon e m a -> InGraphM mon e m b #

(<$) :: a -> InGraphM mon e m b -> InGraphM mon e m a #

Monad m => Monad (InGraphM mon e m) Source # 
Instance details

Defined in Math.Graph.InGraphMonad

Methods

(>>=) :: InGraphM mon e m a -> (a -> InGraphM mon e m b) -> InGraphM mon e m b #

(>>) :: InGraphM mon e m a -> InGraphM mon e m b -> InGraphM mon e m b #

return :: a -> InGraphM mon e m a #

(GraphMonoid mon Bool, Monad m, Ord e) => GraphMonad (InGraphM mon e m) e Source # 
Instance details

Defined in Math.Graph.InGraphMonad

Methods

gisVertex :: e -> InGraphM mon e m Bool Source #

gsource :: e -> InGraphM mon e m e Source #

gtarget :: e -> InGraphM mon e m e Source #

gelements :: InGraphM mon e m (Set e) Source #

gvertices :: InGraphM mon e m (Set e) Source #

gedges :: InGraphM mon e m (Set e) Source #

gedgesStartingFrom :: e -> InGraphM mon e m (Set e) Source #

gedgesEndingTo :: e -> InGraphM mon e m (Set e) Source #

glinks :: InGraphM mon e m (Set (e, e, e)) Source #

gloops :: InGraphM mon e m (Set e) Source #

gisLoop :: e -> InGraphM mon e m Bool Source #

gisEdgeBetween :: e -> e -> e -> InGraphM mon e m Bool Source #

(ReversibleGraphMonoid mon Bool, Monad m, Ord e) => ReversibleGraphMonad (InGraphM mon e m) e Source # 
Instance details

Defined in Math.Graph.InGraphMonad

Methods

ginverse :: e -> InGraphM mon e m e Source #

greversibleLinks :: InGraphM mon e m (Set ((e, e), (e, e))) Source #

goneLaneLoops :: InGraphM mon e m (Set e) Source #

gisOneLaneLoop :: e -> InGraphM mon e m Bool Source #

(Monoid a, Applicative m) => Monoid (InGraphM mon e m a) Source # 
Instance details

Defined in Math.Graph.InGraphMonad

Methods

mempty :: InGraphM mon e m a #

mappend :: InGraphM mon e m a -> InGraphM mon e m a -> InGraphM mon e m a #

mconcat :: [InGraphM mon e m a] -> InGraphM mon e m a #

(Applicative m, Semigroup a) => Semigroup (InGraphM mon e m a) Source # 
Instance details

Defined in Math.Graph.InGraphMonad

Methods

(<>) :: InGraphM mon e m a -> InGraphM mon e m a -> InGraphM mon e m a #

sconcat :: NonEmpty (InGraphM mon e m a) -> InGraphM mon e m a #

stimes :: Integral b => b -> InGraphM mon e m a -> InGraphM mon e m a #

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 #

inGraphM :: Graph mon e -> InGraphM mon e m a -> m a Source #

currentGraphM :: Monad m => InGraphM mon e m (Graph mon e) Source #

actM :: Monad m => e -> mon Bool Bool -> InGraphM mon e m e Source #

actSetM :: (Monad m, Ord e) => Set e -> mon Bool Bool -> InGraphM mon e m (Set e) Source #

elementsM :: (Monad m, Ord e) => InGraphM mon e m (Set e) Source #

borderM :: (GraphMonoid mon Bool, Monad m) => e -> InGraphM mon e m (e, e) Source #

reversibleBorderM :: (ReversibleGraphMonoid mon Bool, Monad m, Ord e) => e -> InGraphM mon e m (e, e) Source #

verticesM :: (Ord e, GraphMonoid mon Bool, Monad m) => InGraphM mon e m (Set e) Source #

edgesM :: (Ord e, GraphMonoid mon Bool, Monad m) => InGraphM mon e m (Set 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 #

linksM :: (Monad m, Ord e, GraphMonoid mon Bool) => InGraphM mon e m (Set (e, e, e)) Source #

reversibleLinksM :: (Monad m, Ord e, ReversibleGraphMonoid mon Bool) => InGraphM mon e m (Set ((e, e), (e, e))) Source #

sourceM :: (GraphMonoid mon Bool, Monad m) => e -> InGraphM mon e m e Source #

targetM :: (GraphMonoid mon Bool, Monad m) => e -> InGraphM mon e m e Source #

inverseM :: (ReversibleGraphMonoid mon Bool, Monad m) => e -> InGraphM mon e m 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.

isVertexM :: (GraphMonoid mon Bool, Monad m, Eq e) => e -> InGraphM mon e m Bool Source #

isEdgeM :: (GraphMonoid mon Bool, Monad m, Eq e) => e -> InGraphM mon e m Bool Source #

hasPathM :: (GraphMonoid mon Bool, Monad m, Eq e) => [e] -> InGraphM mon e m Bool Source #

isEdgeBetweenM :: (Monad m, GraphMonoid mon Bool, Eq e) => e -> e -> e -> InGraphM mon e m Bool Source #

isLoopM :: (Eq e, Monad m, GraphMonoid mon Bool) => e -> InGraphM mon e m Bool Source #

isBandM :: (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 # 
Instance details

Associated Types

data Fold (Graph m a) :: Type -> Type Source #

Methods

visit :: Fold (Graph m a) a0 -> Graph m a -> a0 Source #

(Monad m, Ord e, GraphMonoid mon Bool) => GraphMonad (ReaderT (Graph mon e) m) e Source # 
Instance details

Methods

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 # 
Instance details

Methods

ginverse :: e -> ReaderT (Graph mon e) m e Source #

greversibleLinks :: ReaderT (Graph mon e) m (Set ((e, e), (e, e))) Source #

goneLaneLoops :: ReaderT (Graph mon e) m (Set e) Source #

gisOneLaneLoop :: e -> ReaderT (Graph mon e) m Bool Source #