A directed graph consists of a set of nodes and a set of edges.
Edges connect exactly two nodes and are directional.
A node in the graph consists of methods and data that are common to all graphs associated with some user supplied data. An edge in the graph similarly consists of edge methods and user supplied data. The value associated with a node or edge is supplied by the user when the node or edge is constructed and is stored by value. No restrictions or assumptions are made on the type of user supplied values. The user specifies that their label type inherits directly from a digraph abstract node.