unordered-graphs-0.1.0.1: Graph library using unordered-containers

Copyright(c) Ivan Lazar Miljenovic
LicenseMIT
MaintainerIvan.Miljenovic@gmail.com
Safe HaskellNone
LanguageHaskell2010

Data.Graph.Unordered.Internal

Description

 

Synopsis

Documentation

data Graph et n nl el Source #

Constructors

Gr 

Fields

Instances

(Eq (et n), Eq n, Eq nl, Eq el) => Eq (Graph et n nl el) Source # 

Methods

(==) :: Graph et n nl el -> Graph et n nl el -> Bool #

(/=) :: Graph et n nl el -> Graph et n nl el -> Bool #

(ValidGraph et n, Read n, Read nl, Read el) => Read (Graph et n nl el) Source # 

Methods

readsPrec :: Int -> ReadS (Graph et n nl el) #

readList :: ReadS [Graph et n nl el] #

readPrec :: ReadPrec (Graph et n nl el) #

readListPrec :: ReadPrec [Graph et n nl el] #

(EdgeType et, Show n, Show nl, Show el) => Show (Graph et n nl el) Source # 

Methods

showsPrec :: Int -> Graph et n nl el -> ShowS #

show :: Graph et n nl el -> String #

showList :: [Graph et n nl el] -> ShowS #

(NFData n, NFData (et n), NFData nl, NFData el) => NFData (Graph et n nl el) Source # 

Methods

rnf :: Graph et n nl el -> () #

type NodeMap n nl = HashMap n (Adj, nl) Source #

type EdgeMap et n el = HashMap Edge (et n, el) Source #

newtype Edge Source #

Constructors

Edge 

Fields

Instances

Bounded Edge Source # 
Enum Edge Source # 

Methods

succ :: Edge -> Edge #

pred :: Edge -> Edge #

toEnum :: Int -> Edge #

fromEnum :: Edge -> Int #

enumFrom :: Edge -> [Edge] #

enumFromThen :: Edge -> Edge -> [Edge] #

enumFromTo :: Edge -> Edge -> [Edge] #

enumFromThenTo :: Edge -> Edge -> Edge -> [Edge] #

Eq Edge Source # 

Methods

(==) :: Edge -> Edge -> Bool #

(/=) :: Edge -> Edge -> Bool #

Ord Edge Source # 

Methods

compare :: Edge -> Edge -> Ordering #

(<) :: Edge -> Edge -> Bool #

(<=) :: Edge -> Edge -> Bool #

(>) :: Edge -> Edge -> Bool #

(>=) :: Edge -> Edge -> Bool #

max :: Edge -> Edge -> Edge #

min :: Edge -> Edge -> Edge #

Read Edge Source # 
Show Edge Source # 

Methods

showsPrec :: Int -> Edge -> ShowS #

show :: Edge -> String #

showList :: [Edge] -> ShowS #

NFData Edge Source # 

Methods

rnf :: Edge -> () #

Hashable Edge Source # 

Methods

hashWithSalt :: Int -> Edge -> Int #

hash :: Edge -> Int #

ToContext (n, nl, AdjLookup (at n) el) Source # 

Methods

toContext :: (n, nl, AdjLookup (at n) el) -> Context (CAType (n, nl, AdjLookup (at n) el)) (CNode (n, nl, AdjLookup (at n) el)) (CNLabel (n, nl, AdjLookup (at n) el)) (CELabel (n, nl, AdjLookup (at n) el)) Source #

FromContext (n, nl, AdjLookup (at n) el) Source # 

Methods

fromContext :: Context (CAType (n, nl, AdjLookup (at n) el)) (CNode (n, nl, AdjLookup (at n) el)) (CNLabel (n, nl, AdjLookup (at n) el)) (CELabel (n, nl, AdjLookup (at n) el)) -> (n, nl, AdjLookup (at n) el) Source #

Contextual (n, nl, AdjLookup (at n) el) Source # 

Associated Types

type CNode (n, nl, AdjLookup (at n) el) :: * Source #

type CAType (n, nl, AdjLookup (at n) el) :: * -> * Source #

type CNLabel (n, nl, AdjLookup (at n) el) :: * Source #

type CELabel (n, nl, AdjLookup (at n) el) :: * Source #

type CNode (n, nl, AdjLookup (at n) el) Source # 
type CNode (n, nl, AdjLookup (at n) el) = n
type CAType (n, nl, AdjLookup (at n) el) Source # 
type CAType (n, nl, AdjLookup (at n) el) = at
type CNLabel (n, nl, AdjLookup (at n) el) Source # 
type CNLabel (n, nl, AdjLookup (at n) el) = nl
type CELabel (n, nl, AdjLookup (at n) el) Source # 
type CELabel (n, nl, AdjLookup (at n) el) = el

type Set n = HashMap n () Source #

mkSet :: (Eq n, Hashable n) => [n] -> Set n Source #

adjCount :: Eq n => n -> n -> Int Source #

type ValidGraph et n = (Hashable n, Eq n, EdgeType et) Source #

mkGraph :: ValidGraph et n => [(n, nl)] -> [(n, n, el)] -> Graph et n nl el Source #

Assumes all nodes are in the node list.

class (Functor et, NodeFrom (AdjType et)) => EdgeType et where Source #

Minimal complete definition

mkEdge, otherN, toEdge, edgeNodes, edgeTriple

Associated Types

type AdjType et :: * -> * Source #

Methods

mkEdge :: n -> n -> et n Source #

otherN :: Eq n => n -> et n -> AdjType et n Source #

Assumes n is one of the end points of this edge.

toEdge :: n -> AdjType et n -> et n Source #

edgeNodes :: et n -> [n] Source #

Returns a list of length 2.

edgeTriple :: (et n, el) -> (n, n, el) Source #

Instances

EdgeType UndirEdge Source # 

Associated Types

type AdjType (UndirEdge :: * -> *) :: * -> * Source #

Methods

mkEdge :: n -> n -> UndirEdge n Source #

otherN :: Eq n => n -> UndirEdge n -> AdjType UndirEdge n Source #

toEdge :: n -> AdjType UndirEdge n -> UndirEdge n Source #

edgeNodes :: UndirEdge n -> [n] Source #

edgeTriple :: (UndirEdge n, el) -> (n, n, el) Source #

EdgeType DirEdge Source #

Note that for loops, the result of otherN will always be a ToNode.

Associated Types

type AdjType (DirEdge :: * -> *) :: * -> * Source #

Methods

mkEdge :: n -> n -> DirEdge n Source #

otherN :: Eq n => n -> DirEdge n -> AdjType DirEdge n Source #

toEdge :: n -> AdjType DirEdge n -> DirEdge n Source #

edgeNodes :: DirEdge n -> [n] Source #

edgeTriple :: (DirEdge n, el) -> (n, n, el) Source #

class NodeFrom at where Source #

Minimal complete definition

getNode

Methods

getNode :: at n -> n Source #

Instances

nodeDetails :: Graph et n nl el -> [(n, ([Edge], nl))] Source #

lnodes :: Graph et n nl el -> [(n, nl)] Source #

edges :: Graph et n nl el -> [Edge] Source #

edgeDetails :: Graph et n nl el -> [(Edge, (et n, el))] Source #

ledges :: Graph et n nl el -> [(Edge, el)] Source #

edgePairs :: EdgeType et => Graph et n nl el -> [(n, n)] Source #

ledgePairs :: EdgeType et => Graph et n nl el -> [(n, n, el)] Source #

degNM :: (Eq n, Hashable n) => NodeMap n nl -> n -> Int Source #

withNodeMap :: (NodeMap n nl -> NodeMap n nl') -> Graph et n nl el -> Graph et n nl' el Source #

withEdgeMap :: (EdgeMap et n el -> EdgeMap et n el') -> Graph et n nl el -> Graph et n nl el' Source #