Initialize an empty Diagram. The idea is a box with no label.
The box is abstract and will be given geometry using the Layout module
Use modifiers like setInPorts to configure further
Initialize an empty Diagram with a label of a chosen type
All diagrams you intend to combine needs to have the same label type
Wrap a diagram, exposing the free in and out ports
Make a source with label a and a number of outPorts
Make a sink with label a and a number of inPorts
Make a relation with label a and a number of inPorts and outPorts
Connect diagrams in a chain
Put diagrams in parallel.
No connections will be made.
(We probably need to relabel ports here...)
Assign a label to a Diagram
setLabel (Just "node") <| diagram --Parts of a Diagram can be wrapped and given a label of its own (with setLabel)
Wrap a diagram, exposing the free in and out ports
Represent an abstract wire-diagram.
Think of boxes connected with ports, that can be inside other boxes (which connect outside) (TODO illustration)