Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Functions for modifying the graph. Although the graph structure is entirely expressed by the graph's node collection, for convenience and efficiency the graph representation also comprises a complementary collection of edges, that has to be synchronised with the node collection. Therefore each of the functions below involves a test for whether the graph structure has been changed, and if so, measures are taken to ensure the graph remains consistent.
Invariants for graph consistency:
- Every edge attached to some node points back to that node: ∀n∊N ∀e∊E: n→e ⇔ e→n
- There are no orphaned edges: ∀e∊E ∃n∊N: e→n
Synopsis
- writeNode :: View [Port] n => Node -> n -> Rewrite n ()
- modifyNode :: View [Port] n => Node -> (n -> n) -> Rewrite n ()
- updateNode :: (View [Port] n, View v n) => Node -> v -> Rewrite n ()
- adjustNode :: (View [Port] n, View v n) => Node -> (v -> v) -> Rewrite n ()
- adjustNodeM :: (View [Port] n, View v n) => Node -> (v -> Rewrite n v) -> Rewrite n ()
- newNode :: View [Port] n => n -> Rewrite n Node
- copyNode :: (View [Port] n, View v n) => Node -> v -> Rewrite n Node
- newEdge :: Rewrite n Edge
- deleteNode :: View [Port] n => Node -> Rewrite n ()
- deleteEdge :: View [Port] n => Edge -> Rewrite n [Edge]
- mergeEdges :: View [Port] n => Edge -> Edge -> Rewrite n ()
- module GraphRewriting.Graph.Types
- module Data.View
Documentation
updateNode :: (View [Port] n, View v n) => Node -> v -> Rewrite n () Source #
Wraps update
to update aspect v
of a node.
adjustNode :: (View [Port] n, View v n) => Node -> (v -> v) -> Rewrite n () Source #
Wraps adjust
to adjust aspect v
of a node.
copyNode :: (View [Port] n, View v n) => Node -> v -> Rewrite n Node Source #
Create a new node by cloning another, at the same time updating aspect v
. When defining rewrites in a context where it is not known what type n
the nodes of the graph have, this is the only way to add new nodes to the graph.
newEdge :: Rewrite n Edge Source #
Create a new (unconnected) edge. It is expected that the created edge is connected to a port sooner or later. Otherwise the graph will invove unconnected edges.
deleteEdge :: View [Port] n => Edge -> Rewrite n [Edge] Source #
Disconnect ports connected to the given edge by assigning a new (dangling) edge to each of the ports. Then the edge is deleted.
mergeEdges :: View [Port] n => Edge -> Edge -> Rewrite n () Source #
Reconnects the ports connected to the second edge to the first one. Then the second edge is deleted.
module GraphRewriting.Graph.Types
module Data.View