algebraic-graphs-0.3: A library for algebraic graph construction and transformation

Copyright(c) Andrey Mokhov 2016-2018
LicenseMIT (see the file LICENSE)
Maintainerandrey.mokhov@gmail.com
Stabilityunstable
Safe HaskellNone
LanguageHaskell2010

Algebra.Graph.Labelled.AdjacencyMap.Internal

Contents

Description

This module exposes the implementation of edge-labelled adjacency maps. The API is unstable and unsafe, and is exposed only for documentation. You should use the non-internal module Algebra.Graph.Labelled.AdjdacencyMap instead.

Synopsis

Labelled adjacency map implementation

newtype AdjacencyMap e a Source #

Edge-labelled graphs, where the type variable e stands for edge labels. For example, AdjacencyMap Bool a is isomorphic to unlabelled graphs defined in the top-level module Algebra.Graph.AdjacencyMap, where False and True denote the lack of and the existence of an unlabelled edge, respectively.

Constructors

AM 

Fields

  • adjacencyMap :: Map a (Map a e)

    The adjacency map of an edge-labelled graph: each vertex is associated with a map from its direct successors to the corresponding edge labels.

Instances
(Eq a, Eq e) => Eq (AdjacencyMap e a) Source # 
Instance details

Defined in Algebra.Graph.Labelled.AdjacencyMap.Internal

Methods

(==) :: AdjacencyMap e a -> AdjacencyMap e a -> Bool #

(/=) :: AdjacencyMap e a -> AdjacencyMap e a -> Bool #

(Eq e, Dioid e, Num a, Ord a) => Num (AdjacencyMap e a) Source #

Note: this does not satisfy the usual ring laws; see AdjacencyMap for more details.

Instance details

Defined in Algebra.Graph.Labelled.AdjacencyMap.Internal

(Ord e, Monoid e, Ord a) => Ord (AdjacencyMap e a) Source # 
Instance details

Defined in Algebra.Graph.Labelled.AdjacencyMap.Internal

(Ord a, Show a, Ord e, Show e) => Show (AdjacencyMap e a) Source # 
Instance details

Defined in Algebra.Graph.Labelled.AdjacencyMap.Internal

(NFData a, NFData e) => NFData (AdjacencyMap e a) Source # 
Instance details

Defined in Algebra.Graph.Labelled.AdjacencyMap.Internal

Methods

rnf :: AdjacencyMap e a -> () #

(Eq e, Monoid e, Ord a) => ToGraph (AdjacencyMap e a) Source #

See Algebra.Graph.Labelled.AdjacencyMap.

Instance details

Defined in Algebra.Graph.ToGraph

Associated Types

type ToVertex (AdjacencyMap e a) :: Type Source #

Methods

toGraph :: AdjacencyMap e a -> Graph (ToVertex (AdjacencyMap e a)) Source #

foldg :: r -> (ToVertex (AdjacencyMap e a) -> r) -> (r -> r -> r) -> (r -> r -> r) -> AdjacencyMap e a -> r Source #

isEmpty :: AdjacencyMap e a -> Bool Source #

size :: AdjacencyMap e a -> Int Source #

hasVertex :: ToVertex (AdjacencyMap e a) -> AdjacencyMap e a -> Bool Source #

hasEdge :: ToVertex (AdjacencyMap e a) -> ToVertex (AdjacencyMap e a) -> AdjacencyMap e a -> Bool Source #

vertexCount :: AdjacencyMap e a -> Int Source #

edgeCount :: AdjacencyMap e a -> Int Source #

vertexList :: AdjacencyMap e a -> [ToVertex (AdjacencyMap e a)] Source #

edgeList :: AdjacencyMap e a -> [(ToVertex (AdjacencyMap e a), ToVertex (AdjacencyMap e a))] Source #

vertexSet :: AdjacencyMap e a -> Set (ToVertex (AdjacencyMap e a)) Source #

vertexIntSet :: AdjacencyMap e a -> IntSet Source #

edgeSet :: AdjacencyMap e a -> Set (ToVertex (AdjacencyMap e a), ToVertex (AdjacencyMap e a)) Source #

preSet :: ToVertex (AdjacencyMap e a) -> AdjacencyMap e a -> Set (ToVertex (AdjacencyMap e a)) Source #

preIntSet :: Int -> AdjacencyMap e a -> IntSet Source #

postSet :: ToVertex (AdjacencyMap e a) -> AdjacencyMap e a -> Set (ToVertex (AdjacencyMap e a)) Source #

postIntSet :: Int -> AdjacencyMap e a -> IntSet Source #

adjacencyList :: AdjacencyMap e a -> [(ToVertex (AdjacencyMap e a), [ToVertex (AdjacencyMap e a)])] Source #

adjacencyMap :: AdjacencyMap e a -> Map (ToVertex (AdjacencyMap e a)) (Set (ToVertex (AdjacencyMap e a))) Source #

adjacencyIntMap :: AdjacencyMap e a -> IntMap IntSet Source #

adjacencyMapTranspose :: AdjacencyMap e a -> Map (ToVertex (AdjacencyMap e a)) (Set (ToVertex (AdjacencyMap e a))) Source #

adjacencyIntMapTranspose :: AdjacencyMap e a -> IntMap IntSet Source #

dfsForest :: AdjacencyMap e a -> Forest (ToVertex (AdjacencyMap e a)) Source #

dfsForestFrom :: [ToVertex (AdjacencyMap e a)] -> AdjacencyMap e a -> Forest (ToVertex (AdjacencyMap e a)) Source #

dfs :: [ToVertex (AdjacencyMap e a)] -> AdjacencyMap e a -> [ToVertex (AdjacencyMap e a)] Source #

reachable :: ToVertex (AdjacencyMap e a) -> AdjacencyMap e a -> [ToVertex (AdjacencyMap e a)] Source #

topSort :: AdjacencyMap e a -> Maybe [ToVertex (AdjacencyMap e a)] Source #

isAcyclic :: AdjacencyMap e a -> Bool Source #

toAdjacencyMap :: AdjacencyMap e a -> AdjacencyMap0 (ToVertex (AdjacencyMap e a)) Source #

toAdjacencyMapTranspose :: AdjacencyMap e a -> AdjacencyMap0 (ToVertex (AdjacencyMap e a)) Source #

toAdjacencyIntMap :: AdjacencyMap e a -> AdjacencyIntMap Source #

toAdjacencyIntMapTranspose :: AdjacencyMap e a -> AdjacencyIntMap Source #

isDfsForestOf :: Forest (ToVertex (AdjacencyMap e a)) -> AdjacencyMap e a -> Bool Source #

isTopSortOf :: [ToVertex (AdjacencyMap e a)] -> AdjacencyMap e a -> Bool Source #

(Dioid e, Eq e, Ord a) => Graph (AdjacencyMap e a) Source # 
Instance details

Defined in Algebra.Graph.Class

Associated Types

type Vertex (AdjacencyMap e a) :: Type Source #

type ToVertex (AdjacencyMap e a) Source # 
Instance details

Defined in Algebra.Graph.ToGraph

type ToVertex (AdjacencyMap e a) = a
type Vertex (AdjacencyMap e a) Source # 
Instance details

Defined in Algebra.Graph.Class

type Vertex (AdjacencyMap e a) = a

consistent :: (Ord a, Eq e, Monoid e) => AdjacencyMap e a -> Bool Source #

Check if the internal graph representation is consistent, i.e. that all edges refer to existing vertices, and there are no zero-labelled edges. It should be impossible to create an inconsistent adjacency map, and we use this function in testing. Note: this function is for internal use only.