Safe Haskell | None |
---|---|

Language | Haskell98 |

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

- 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