Safe Haskell | None |
---|---|
Language | Haskell2010 |
Synopsis
- data Graph (d :: EdgeType) v e = Graph {
- _graph :: IGraph
- _labelToNode :: Map v [Node]
- data EdgeType
- type Node = Int
- type LNode a = (Node, a)
- type Edge = (Node, Node)
- type LEdge a = (Edge, a)
- isDirected :: forall d v e. SingI d => Graph d v e -> Bool
- nNodes :: Graph d v e -> Int
- nodeLab :: Serialize v => Graph d v e -> Node -> v
- nodes :: Graph d v e -> [Node]
- labNodes :: Serialize v => Graph d v e -> [LNode v]
- nEdges :: Graph d v e -> Int
- edgeLab :: Serialize e => Graph d v e -> Edge -> e
- edges :: Graph d v e -> [Edge]
- labEdges :: Serialize e => Graph d v e -> [LEdge e]
- addNodes :: (Ord v, Serialize v) => [v] -> Graph d v e -> Graph d v e
- delNodes :: (Ord v, Serialize v) => [Node] -> Graph d v e -> Graph d v e
- addEdges :: Serialize e => [LEdge e] -> Graph d v e -> Graph d v e
- delEdges :: SingI d => [Edge] -> Graph d v e -> Graph d v e
- hasEdge :: Edge -> Graph d v e -> Bool
- getNodes :: Ord v => Graph d v e -> v -> [Node]
- getEdgeByEid :: Graph d v e -> Int -> Edge
- getEdgeLabByEid :: Serialize e => Graph d v e -> Int -> e
- empty :: (SingI d, Serialize v, Ord v, Serialize e) => Graph d v e
- mkGraph :: (SingI d, Serialize v, Ord v, Serialize e) => [v] -> [LEdge e] -> Graph d v e
- fromLabeledEdges :: (SingI d, Serialize v, Ord v, Serialize e) => [((v, v), e)] -> Graph d v e
- fromLabeledEdges' :: (MonadUnliftIO m, SingI d, Serialize v, Ord v, Serialize e) => a -> (a -> ConduitT () ((v, v), e) m ()) -> m (Graph d v e)
- unsafeFreeze :: PrimMonad m => MGraph (PrimState m) d v e -> m (Graph d v e)
- freeze :: PrimMonad m => MGraph (PrimState m) d v e -> m (Graph d v e)
- unsafeThaw :: PrimMonad m => Graph d v e -> m (MGraph (PrimState m) d v e)
- thaw :: PrimMonad m => Graph d v e -> m (MGraph (PrimState m) d v e)
- neighbors :: Graph d v e -> Node -> [Node]
- pre :: Graph D v e -> Node -> [Node]
- suc :: Graph D v e -> Node -> [Node]
- nmap :: (Serialize v1, Serialize v2, Ord v2) => (LNode v1 -> v2) -> Graph d v1 e -> Graph d v2 e
- emap :: (Serialize e1, Serialize e2, Ord v, Serialize v) => (LEdge e1 -> e2) -> Graph d v e1 -> Graph d v e2
- nfilter :: (Ord v, Serialize v) => (LNode v -> Bool) -> Graph d v e -> Graph d v e
- efilter :: (SingI d, Ord v, Serialize v, Serialize e) => (LEdge e -> Bool) -> Graph d v e -> Graph d v e
- isSimple :: Graph d v e -> Bool
- hasMultiple :: Graph d v e -> Bool
Documentation
Instances
Eq EdgeType Source # | |
Generic EdgeType Source # | |
Serialize EdgeType Source # | |
SEq EdgeType Source # | |
PEq EdgeType Source # | |
SDecide EdgeType Source # | |
SingKind EdgeType Source # | |
SingI D Source # | |
SingI U Source # | |
type Rep EdgeType Source # | |
data Sing (z :: EdgeType) Source # | |
type Demote EdgeType Source # | |
type (x :: EdgeType) /= (y :: EdgeType) Source # | |
type (a :: EdgeType) == (b :: EdgeType) Source # | |
Add nodes with labels to the graph.
delNodes :: (Ord v, Serialize v) => [Node] -> Graph d v e -> Graph d v e Source #
Delete nodes from the graph.
addEdges :: Serialize e => [LEdge e] -> Graph d v e -> Graph d v e Source #
Add edges with labels to the graph.
getNodes :: Ord v => Graph d v e -> v -> [Node] Source #
Return all nodes that are associated with given label.
:: (SingI d, Serialize v, Ord v, Serialize e) | |
=> [v] | Nodes. Each will be assigned a ID from 0 to N. |
-> [LEdge e] | Labeled edges. |
-> Graph d v e |
Create a graph.
fromLabeledEdges :: (SingI d, Serialize v, Ord v, Serialize e) => [((v, v), e)] -> Graph d v e Source #
Create a graph from labeled edges.
:: (MonadUnliftIO m, SingI d, Serialize v, Ord v, Serialize e) | |
=> a | Input, usually a file |
-> (a -> ConduitT () ((v, v), e) m ()) | deserialize the input into a stream of edges |
-> m (Graph d v e) |
Create a graph from a stream of labeled edges.
unsafeFreeze :: PrimMonad m => MGraph (PrimState m) d v e -> m (Graph d v e) Source #
Convert a mutable graph to immutable graph. The original graph may not be used afterwards.
freeze :: PrimMonad m => MGraph (PrimState m) d v e -> m (Graph d v e) Source #
Convert a mutable graph to immutable graph.
unsafeThaw :: PrimMonad m => Graph d v e -> m (MGraph (PrimState m) d v e) Source #
Create a mutable graph. The original graph may not be used afterwards.
thaw :: PrimMonad m => Graph d v e -> m (MGraph (PrimState m) d v e) Source #
Create a mutable graph.
nmap :: (Serialize v1, Serialize v2, Ord v2) => (LNode v1 -> v2) -> Graph d v1 e -> Graph d v2 e Source #
Apply a function to change nodes' labels.
emap :: (Serialize e1, Serialize e2, Ord v, Serialize v) => (LEdge e1 -> e2) -> Graph d v e1 -> Graph d v e2 Source #
Apply a function to change edges' labels.
nfilter :: (Ord v, Serialize v) => (LNode v -> Bool) -> Graph d v e -> Graph d v e Source #
Keep nodes that satisfy the constraint.
efilter :: (SingI d, Ord v, Serialize v, Serialize e) => (LEdge e -> Bool) -> Graph d v e -> Graph d v e Source #
Keep edges that satisfy the constraint.
Non-simple graphs: multiple and loop edges
isSimple :: Graph d v e -> Bool Source #
Decides whether the input graph is a simple graph. A graph is a simple graph if it does not contain loop edges and multiple edges.
hasMultiple :: Graph d v e -> Bool Source #
Check whether the graph has at least one multiple edge. An edge is a multiple edge if there is another edge with the same head and tail vertices in the graph.