th-typegraph-0.32: Graph of the subtype relation

Safe HaskellNone
LanguageHaskell2010

Language.Haskell.TH.TypeGraph.Edges

Description

Operations involving the edges of the graph (before it is a graph.)

Synopsis

Documentation

type GraphEdges key = Map key (Set key) Source

typeGraphEdges :: forall m. (DsMonad m, Functor m, MonadReaders TypeInfo m, MonadStates ExpandMap m) => m (GraphEdges TGV) Source

Given the discovered set of types and maps of type synonyms and fields, build and return the GraphEdges relation on TypeGraphVertex. This is not a recursive function, it stops when it reaches the field types.

cut :: (Eq a, Ord a) => (a -> Bool) -> GraphEdges a -> GraphEdges a Source

Isolate and remove matching nodes

cutM :: (Functor m, Monad m, Eq a, Ord a) => (a -> m Bool) -> GraphEdges a -> m (GraphEdges a) Source

Monadic predicate version of cut.

cutEdges :: (Eq a, Ord a) => (a -> a -> Bool) -> GraphEdges a -> GraphEdges a Source

cutEdgesM :: (Monad m, Eq a, Ord a) => (a -> a -> m Bool) -> GraphEdges a -> m (GraphEdges a) Source

isolate :: (Eq a, Ord a) => (a -> Bool) -> GraphEdges a -> GraphEdges a Source

Remove all the in- and out-edges of matching nodes

isolateM :: (Functor m, Monad m, Eq a, Ord a) => (a -> m Bool) -> GraphEdges a -> m (GraphEdges a) Source

Monadic predicate version of isolate.

link :: (Eq a, Ord a) => (a -> Maybe (Set a)) -> GraphEdges a -> GraphEdges a Source

Replace the out set of selected nodes

linkM :: (Eq a, Ord a, Monad m) => (a -> m (Maybe (Set a))) -> GraphEdges a -> m (GraphEdges a) Source

dissolve :: (Eq a, Ord a) => (a -> Bool) -> GraphEdges a -> GraphEdges a Source

Remove matching nodes and extend each of their in-edges to each of their out-edges.

dissolveM :: (Functor m, Monad m, Eq a, Ord a) => (a -> m Bool) -> GraphEdges a -> m (GraphEdges a) Source

Monadic predicate version of dissolve.

simpleEdges :: GraphEdges TGV -> GraphEdges TGVSimple Source

Simplify a graph by throwing away the field information in each node. This means the nodes only contain the fully expanded Type value (and any type synonyms.)