WAGS.Validation
- Package
- purescript-wags
- Repository
- mikesol/purescript-wags
Validation algorithms for audio graphs.
Validation includes making sure the graph is renderable by the web audio API and retrieving information about valid graphs, like their terminal node (ie a loudspeaker).
#GraphIsRenderable Source
class GraphIsRenderable (graph :: Graph)
Asserts that an audio graph is renderable.
Every time that makeScene
is called, we assert that the graph is
renderable. This means that it can be played by the WebAudio API
without any runtime errors. Note that this assertion is a
compile time assertion and not a runtime assertion. This means that,
when your program is compiled, it is guaranteed to be renderable by
the WebAudio API assuming that it is within the memory constraints
of a given browser and computer. Usually, these memory limits are not
hit unless one has hundreds of active nodes.
Instances
(NoNodesAreDuplicated graph, AllEdgesPointToNodes graph, NoParallelEdges graph, HasSourceNodes graph, UniqueTerminus graph terminus, NodeIsOutputDevice terminus, AllNodesAreSaturated graph) => GraphIsRenderable graph
#TerminalNode Source
class TerminalNode (g :: Graph) (ptr :: Ptr) | g -> ptr
Retrieves the terminal node from an audio grpah. This is almost always a speaker or recording, but if the graph is at an intermediary stage of construction, this could be another top-level node, ie a gain node.
Instances
(UniqueTerminus g t, GetAudioUnit t u, GetPointer u ptr) => TerminalNode g ptr
#TerminalIdentityEdge Source
class TerminalIdentityEdge (u :: Graph) (prof :: EdgeProfile) | u -> prof
Retrieves the terminal node from an audio grpah as an edge profile - in this case, a single edge into the terminal node.
Instances
(TerminalNode i ptr) => TerminalIdentityEdge i (SingleEdge ptr)
#LookupNL Source
class LookupNL (accumulator :: NodeList) (ptr :: Ptr) (graph :: NodeList) (node :: NodeList) | accumulator ptr graph -> node
Tail recursive lookup of a node in a node list.
accumulator
: the accumulator for tail recursion that should start atNodeListNil
.ptr
: the pointer of the node we are trying retrieve.graph
: the list of nodes to iterate over.node
: a list of nodes that have this pointer.
Instances
LookupNL accumulator ptr NodeListNil accumulator
(GetAudioUnit head headAU, GetPointer headAU maybePtr, BinEq maybePtr ptr tf, Gate tf (NodeListCons head NodeListNil) NodeListNil toComp, NodeListKeepSingleton toComp accumulator acc, LookupNL acc ptr tail o) => LookupNL accumulator ptr (NodeListCons head tail) o
#NodeNotInNodeList Source
class NodeNotInNodeList (node :: Node) (nodeList :: NodeList)
Assertion that node
is not present in nodeList
.
Instances
NodeNotInNodeList node NodeListNil
(GetAudioUnit node nodeAu, GetAudioUnit head headAu, AudioUnitEq nodeAu headAu False, NodeNotInNodeList node tail) => NodeNotInNodeList node (NodeListCons head tail)
#NoNodesAreDuplicatedInNodeList Source
class NoNodesAreDuplicatedInNodeList (nodeList :: NodeList)
Assertion that there are no duplicate nodes in nodeList
.
Instances
NoNodesAreDuplicatedInNodeList NodeListNil
(NodeNotInNodeList head tail, NoNodesAreDuplicatedInNodeList tail) => NoNodesAreDuplicatedInNodeList (NodeListCons head tail)
#NoNodesAreDuplicated Source
class NoNodesAreDuplicated (graph :: Graph)
Assertion that there are no duplicate nodes in graph
.
Instances
(GraphToNodeList graph nodeList, NoNodesAreDuplicatedInNodeList nodeList) => NoNodesAreDuplicated graph
#PtrInPtrList Source
class PtrInPtrList (foundPtr :: Type) (ptr :: Ptr) (ptrList :: PtrList) (output :: Type) | foundPtr ptr ptrList -> output
Tail-recursive check that a pointer is in a pointer list.
foundPtr
: an accumulator indicating whether we've found the ptr or not. Starts as False.ptr
: is this ptr in the pointer list?ptrList
: a list of pointersoutput
:True
if the pointer is in the list,False
otherwise.
Instances
PtrInPtrList True a b True
PtrInPtrList False a PtrListNil False
(BinEq ptr head foundNode, PtrInPtrList foundNode ptr tail o) => PtrInPtrList False ptr (PtrListCons head tail) o
#AudioUnitInAudioUnitList Source
class AudioUnitInAudioUnitList (foundAU :: Type) (audioUnit :: AudioUnit) (audioUnitList :: AudioUnitList) (output :: Type) | foundAU audioUnit audioUnitList -> output
Tail-recursive check that an audio unit is in an audio unit list.
foundPtr
: an accumulator indicating whether we've found the audio unit or not. Starts as False.audioUnit
: is this audioUnit in the audio unit list?audioUnitList
: a list of audio unitsoutput
:True
if the audio unit is in the list,False
otherwise.
Instances
AudioUnitInAudioUnitList True a b True
AudioUnitInAudioUnitList False a AudioUnitNil False
(AudioUnitEq au head foundAU, AudioUnitInAudioUnitList foundAU au tail o) => AudioUnitInAudioUnitList False au (AudioUnitCons head tail) o
#AllPtrsInNodeList Source
class AllPtrsInNodeList (pointers :: PtrList) (nodeList :: NodeList)
Assertion that all pointers
are present in a nodeList
.
Instances
AllPtrsInNodeList PtrListNil haystack
(LookupNL NodeListNil head haystack (NodeListCons x NodeListNil), AllPtrsInNodeList tail haystack) => AllPtrsInNodeList (PtrListCons head tail) haystack
#GetEdgesAsPtrList Source
class GetEdgesAsPtrList (node :: Node) (ptrList :: PtrList) | node -> ptrList
For a given node
, get all of its incoming edges as a ptrList
.
Instances
GetEdgesAsPtrList (NodeC x NoEdge) PtrListNil
GetEdgesAsPtrList (NodeC x (SingleEdge e)) (PtrListCons e PtrListNil)
GetEdgesAsPtrList (NodeC x (ManyEdges e l)) (PtrListCons e l)
#AllEdgesInNodeList Source
class AllEdgesInNodeList (needles :: NodeList) (haystack :: NodeList)
For a given set of nodes called needles
, assert that all of them are present in at least one incoming edge of the nodes called haystack
.
Instances
AllEdgesInNodeList NodeListNil haystack
(GetEdgesAsPtrList head ptrList, AllPtrsInNodeList ptrList haystack, AllEdgesInNodeList tail haystack) => AllEdgesInNodeList (NodeListCons head tail) haystack
#AllEdgesPointToNodes Source
class AllEdgesPointToNodes (graph :: Graph)
Assertion that all edges in the graph point to a node in the graph.
Instances
(GraphToNodeList graph nodeList, AllEdgesInNodeList nodeList nodeList) => AllEdgesPointToNodes graph
#PtrNotInPtrList Source
class PtrNotInPtrList (ptr :: Ptr) (ptrList :: PtrList)
Assertion that ptr
is not in ptrList
.
Instances
PtrNotInPtrList ptr PtrListNil
(BinEq ptr head False, PtrNotInPtrList ptr tail) => PtrNotInPtrList ptr (PtrListCons head tail)
#NoPtrsAreDuplicatedInPtrList Source
class NoPtrsAreDuplicatedInPtrList (ptrList :: PtrList)
Assertion that not pointers are duplicated in ptrList
.
Instances
NoPtrsAreDuplicatedInPtrList PtrListNil
(PtrNotInPtrList head tail, NoPtrsAreDuplicatedInPtrList tail) => NoPtrsAreDuplicatedInPtrList (PtrListCons head tail)
#NoParallelEdgesNL Source
class NoParallelEdgesNL (nodeList :: NodeList)
Assertion that nodeList
contains no parallel edges. Parallel edges are two or more edges from node1
to node2
in a list of nodes.
Instances
NoParallelEdgesNL NodeListNil
(NoParallelEdgesNL tail) => NoParallelEdgesNL (NodeListCons (NodeC n NoEdge) tail)
(NoParallelEdgesNL tail) => NoParallelEdgesNL (NodeListCons (NodeC n (SingleEdge e)) tail)
(NoPtrsAreDuplicatedInPtrList (PtrListCons e l), NoParallelEdgesNL tail) => NoParallelEdgesNL (NodeListCons (NodeC n (ManyEdges e l)) tail)
#NoParallelEdges Source
class NoParallelEdges (graph :: Graph)
Assertion that graph
contains no parallel edges. Parallel edges are two or more edges from node1
to node2
in a list of nodes.
Instances
(GraphToNodeList graph nodeList, NoParallelEdgesNL nodeList) => NoParallelEdges graph
#SourceNodesNL Source
class SourceNodesNL (accumulator :: NodeList) (nodeList :: NodeList) (output :: NodeList) | accumulator nodeList -> output
Tail-recursive lookup of all nodes in a graph without incoming edges.
accumulator
is the accumulator that will be returned.nodeList
is the list of nodes that will be searched over.output
contains all nodes without incoming edges.
Instances
SourceNodesNL accumulator NodeListNil accumulator
(SourceNodesNL (NodeListCons (NodeC i NoEdge) accumulator) tail o) => SourceNodesNL accumulator (NodeListCons (NodeC i NoEdge) tail) o
(SourceNodesNL accumulator tail o) => SourceNodesNL accumulator (NodeListCons (NodeC i (SingleEdge x)) tail) o
(SourceNodesNL accumulator tail o) => SourceNodesNL accumulator (NodeListCons (NodeC i (ManyEdges x l)) tail) o
#SourceNodes Source
class SourceNodes (graph :: Graph) (nodeList :: NodeList) | graph -> nodeList
Lookup of all nodes in graph
without incoming edges and return them as nodeList
.
Instances
(GraphToNodeList graph nodeList, SourceNodesNL NodeListNil nodeList sourceNodes) => SourceNodes graph sourceNodes
#HasSourceNodes Source
class HasSourceNodes (graph :: Graph)
Assertion that a graph has source nodes. Source nodes are nodes without incoming edges.
Instances
(SourceNodes graph (NodeListCons a b)) => HasSourceNodes graph
#AudioUnitInNodeList Source
class AudioUnitInNodeList (foundNode :: Type) (audioUnit :: AudioUnit) (nodeList :: NodeList) (output :: Type) | foundNode audioUnit nodeList -> output
Tail-recursive lookup of audio unit in node list.
foundNode
: an accumulator indicating whether we've found the node or not. Starts as False.audioUnit
: is this audioUnit in the node list?nodeList
: a list of nodesoutput
:True
if the audio unit is in the list,False
otherwise.
Instances
AudioUnitInNodeList True a b True
AudioUnitInNodeList False a NodeListNil False
(GetAudioUnit head headAu, AudioUnitEq au headAu foundNode, AudioUnitInNodeList foundNode au tail o) => AudioUnitInNodeList False au (NodeListCons head tail) o
#RemoveDuplicates Source
class RemoveDuplicates (accumulator :: NodeList) (maybeWithDuplicates :: NodeList) (output :: NodeList) | accumulator maybeWithDuplicates -> output
Tail-recursive removal of duplicate nodes from a node list.
accumulator
: the accumulating deduped list. Starts at NodeListNil.maybeWithDuplicates
: a node list that potentially has duplicates.output
: the final deduped list
Instances
RemoveDuplicates accumulator NodeListNil accumulator
(GetAudioUnit head au, AudioUnitInNodeList False au accumulator tf, Gate tf accumulator (NodeListCons head accumulator) acc, RemoveDuplicates acc tail o) => RemoveDuplicates accumulator (NodeListCons head tail) o
#NodeInNodeList Source
class NodeInNodeList (foundNode :: Type) (node :: Node) (nodeList :: NodeList) (output :: Type) | foundNode node nodeList -> output
Tail-recursive lookup of node in a node list.
foundNode
: an accumulator indicating whether we've found the node or not. Starts as False.node
: is this node in the node list?nodeList
: a list of nodesoutput
:True
if the node is in the list,False
otherwise.
Instances
NodeInNodeList True a b True
NodeInNodeList False a NodeListNil False
(GetAudioUnit head headAu, GetAudioUnit node nodeAu, AudioUnitEq nodeAu headAu foundNode, NodeInNodeList foundNode node tail o) => NodeInNodeList False node (NodeListCons head tail) o
#UnvisitedNodes Source
class UnvisitedNodes (visited :: NodeList) (accumulator :: NodeList) (candidates :: NodeList) (unvisited :: NodeList) | visited accumulator candidates -> unvisited
Tail-recursive algorithm to find nodes we have not visited yet.
visited
nodes that we have visitedaccumulator
accumulates unvisited nodescandidates
are nodes that have potentially not been visited yet and will be cross-referenced againstvisited
.unvisited
is a list of unvisited nodes.
Instances
UnvisitedNodes visited accumulator NodeListNil accumulator
(NodeInNodeList False head visited tf, Gate tf accumulator (NodeListCons head accumulator) acc, UnvisitedNodes visited acc tail o) => UnvisitedNodes visited accumulator (NodeListCons head tail) o
#ToVisitSingle Source
class ToVisitSingle (accumulator :: NodeList) (graph :: NodeList) (findMeInAnEdge :: Node) (candidates :: NodeList) | accumulator graph findMeInAnEdge -> candidates
In the node-visiting algorithm, this is a single step where we look for a node in a given list of edges. This step is repeated until all of the nodes have been visited.
accumulator
- the running accumulator of nodes we are visitinggraph
- the entire graph. if we were using an env comonad, this would be the environmentfindMeInAnEdge
- this is the node we want to find in edgescandidates
- these are all of the nodes that havefindMeInAnEdge
as an incoming connection
Instances
ToVisitSingle accumulator NodeListNil findMeInAnEdge accumulator
(GetEdgesAsPtrList head edgeList, GetAudioUnit findMeInAnEdge au, GetPointer au ptr, PtrInPtrList False ptr edgeList tf, Gate tf (NodeListCons head accumulator) accumulator acc, ToVisitSingle acc tail findMeInAnEdge o) => ToVisitSingle accumulator (NodeListCons head tail) findMeInAnEdge o
#NodeListAppend Source
class NodeListAppend (l :: NodeList) (r :: NodeList) (o :: NodeList) | l r -> o
This appends node list l
and r
to produce the result o
.
Instances
NodeListAppend NodeListNil NodeListNil NodeListNil
NodeListAppend NodeListNil (NodeListCons x y) (NodeListCons x y)
NodeListAppend (NodeListCons x y) NodeListNil (NodeListCons x y)
(NodeListAppend b (NodeListCons c d) o) => NodeListAppend (NodeListCons a b) (NodeListCons c d) (NodeListCons a o)
#PtrListAppend Source
class PtrListAppend (l :: PtrList) (r :: PtrList) (o :: PtrList) | l r -> o
This appends pointer list l
and r
to produce the result o
.
Instances
PtrListAppend PtrListNil PtrListNil PtrListNil
PtrListAppend PtrListNil (PtrListCons x y) (PtrListCons x y)
PtrListAppend (PtrListCons x y) PtrListNil (PtrListCons x y)
(PtrListAppend b (PtrListCons c d) o) => PtrListAppend (PtrListCons a b) (PtrListCons c d) (PtrListCons a o)
#AltEdgeProfile Source
class AltEdgeProfile (a :: EdgeProfile) (b :: EdgeProfile) (c :: EdgeProfile) | a b -> c
This is the equivalent of Alt
for edge profiles. NoEdge
always loses.
Instances
AltEdgeProfile NoEdge b b
AltEdgeProfile a NoEdge a
#IsNodeListEmpty Source
class IsNodeListEmpty (nodeList :: NodeList) (tf :: Type) | nodeList -> tf
Asks is nodeList
empty and replies with True
or False
as tf
.
Instances
#ToVisit Source
class ToVisit (candidatesAccumulator :: NodeList) (parentlessAccumulator :: NodeList) (graph :: NodeList) (findMeInAnEdge :: NodeList) (candidates :: NodeList) (parentless :: NodeList) | candidatesAccumulator parentlessAccumulator graph findMeInAnEdge -> candidates parentless
In the visiting algorithm, obtains a list of nodes to visit as well as parentless or "sink" nodes.
candidatesAccumulator
an accumulator of candidates to visitparentlessAccumulator
an accumulator of parentless or "sink" nodesgraph
- the entire graph. if we were using an env comonad, this would be the environmentfindMeInAnEdge
- a list of nodes remaining to find in edges. This starts as the whole graph and whittles down to no nodes as the algorithm runs.candidates
return value of candidates for the next stepparentless
return value of parentless nodes in the graph
Instances
ToVisit candidatesAccumulator parentlessAccumulator graph NodeListNil candidatesAccumulator parentlessAccumulator
(ToVisitSingle NodeListNil graph findMeInAnEdge o, IsNodeListEmpty o tf, Gate tf (NodeListCons findMeInAnEdge parentlessAccumulator) parentlessAccumulator pA, NodeListAppend candidatesAccumulator o cA, ToVisit cA pA graph tail ccA ppA) => ToVisit candidatesAccumulator parentlessAccumulator graph (NodeListCons findMeInAnEdge tail) ccA ppA
#TerminusLoop Source
class TerminusLoop (graph :: NodeList) (visited :: NodeList) (visiting :: NodeList) (accumulator :: NodeList) (output :: NodeList) | graph visited visiting accumulator -> output
The algorithm that finds the terminal nodes of a graph.
graph
- the entire graph. if we were using an env comonad, this would be the environmentvisited
- nodes we have visited so far in the aglorithmvisiting
- nodes we are currently visiting in the aglorithmaccumulator
- accumulator for tail-recursion that builds outputoutput
- terminal nodes of the graph
Instances
TerminusLoop graph visited NodeListNil accumulator accumulator
(ToVisit NodeListNil NodeListNil graph (NodeListCons a b) candidatesDup parentless, RemoveDuplicates NodeListNil candidatesDup candidates, UnvisitedNodes visited NodeListNil candidates unvisited, NodeListAppend unvisited visited newVisited, NodeListAppend accumulator parentless newAccumulator, TerminusLoop graph newVisited unvisited newAccumulator o) => TerminusLoop graph visited (NodeListCons a b) accumulator o
#UniqueTerminus Source
class UniqueTerminus (graph :: Graph) (node :: Node) | graph -> node
Assertion that graph
has the unique terminus node
. Note that,
due to the fundep, the assertion also finds the unique terminus
if it exists.
Instances
(SourceNodes graph source, GraphToNodeList graph graphAsNodeList, TerminusLoop graphAsNodeList NodeListNil source NodeListNil terminii, RemoveDuplicates NodeListNil terminii (NodeListCons node NodeListNil)) => UniqueTerminus graph node
#HasUniqueTerminus Source
class HasUniqueTerminus (graph :: Graph)
Assertion that graph
has a unique terminus.
Instances
(UniqueTerminus graph node) => HasUniqueTerminus graph
#AllNodesAreSaturatedNL Source
class AllNodesAreSaturatedNL (graph :: NodeList)
Asserts that all nodes in graph
are saturated.
"Saturation" for audio nodes is similar to the concept of saturation
in types, namely that they have all the information necessary to
render. In doing so, it also fails the assertion on degenerate nodes,
ie sine-wave oscillators with input (which wouldn't make sense).
Instances
AllNodesAreSaturatedNL NodeListNil
(AllNodesAreSaturatedNL tail) => AllNodesAreSaturatedNL (NodeListCons (NodeC (TAllpass a) (SingleEdge e)) tail)
(AllNodesAreSaturatedNL tail) => AllNodesAreSaturatedNL (NodeListCons (NodeC (TBandpass a) (SingleEdge e)) tail)
(AllNodesAreSaturatedNL tail) => AllNodesAreSaturatedNL (NodeListCons (NodeC (TConstant a) NoEdge) tail)
(AllNodesAreSaturatedNL tail) => AllNodesAreSaturatedNL (NodeListCons (NodeC (TConvolver a name) (SingleEdge e)) tail)
(AllNodesAreSaturatedNL tail) => AllNodesAreSaturatedNL (NodeListCons (NodeC (TDelay a) (SingleEdge e)) tail)
(AllNodesAreSaturatedNL tail) => AllNodesAreSaturatedNL (NodeListCons (NodeC (TDynamicsCompressor a) (SingleEdge e)) tail)
(AllNodesAreSaturatedNL tail) => AllNodesAreSaturatedNL (NodeListCons (NodeC (TGain a) (SingleEdge e)) tail)
(AllNodesAreSaturatedNL tail) => AllNodesAreSaturatedNL (NodeListCons (NodeC (TGain a) (ManyEdges e l)) tail)
(AllNodesAreSaturatedNL tail) => AllNodesAreSaturatedNL (NodeListCons (NodeC (THighpass a) (SingleEdge e)) tail)
(AllNodesAreSaturatedNL tail) => AllNodesAreSaturatedNL (NodeListCons (NodeC (THighshelf a) (SingleEdge e)) tail)
(AllNodesAreSaturatedNL tail) => AllNodesAreSaturatedNL (NodeListCons (NodeC (TLoopBuf a) NoEdge) tail)
(AllNodesAreSaturatedNL tail) => AllNodesAreSaturatedNL (NodeListCons (NodeC (TLowpass a) (SingleEdge e)) tail)
(AllNodesAreSaturatedNL tail) => AllNodesAreSaturatedNL (NodeListCons (NodeC (TLowshelf a) (SingleEdge e)) tail)
(AllNodesAreSaturatedNL tail) => AllNodesAreSaturatedNL (NodeListCons (NodeC (TMicrophone a) NoEdge) tail)
(AllNodesAreSaturatedNL tail) => AllNodesAreSaturatedNL (NodeListCons (NodeC (TNotch a) (SingleEdge e)) tail)
(AllNodesAreSaturatedNL tail) => AllNodesAreSaturatedNL (NodeListCons (NodeC (TPeaking a) (SingleEdge e)) tail)
(AllNodesAreSaturatedNL tail) => AllNodesAreSaturatedNL (NodeListCons (NodeC (TPeriodicOsc a) NoEdge) tail)
(AllNodesAreSaturatedNL tail) => AllNodesAreSaturatedNL (NodeListCons (NodeC (TPlayBuf a) NoEdge) tail)
(AllNodesAreSaturatedNL tail) => AllNodesAreSaturatedNL (NodeListCons (NodeC (TRecorder a name) (SingleEdge e)) tail)
(AllNodesAreSaturatedNL tail) => AllNodesAreSaturatedNL (NodeListCons (NodeC (TSawtoothOsc a) NoEdge) tail)
(AllNodesAreSaturatedNL tail) => AllNodesAreSaturatedNL (NodeListCons (NodeC (TSinOsc a) NoEdge) tail)
(AllNodesAreSaturatedNL tail) => AllNodesAreSaturatedNL (NodeListCons (NodeC (TSpeaker a) (SingleEdge e)) tail)
(AllNodesAreSaturatedNL tail) => AllNodesAreSaturatedNL (NodeListCons (NodeC (TSpeaker a) (ManyEdges e l)) tail)
(AllNodesAreSaturatedNL tail) => AllNodesAreSaturatedNL (NodeListCons (NodeC (TSquareOsc a) NoEdge) tail)
(AllNodesAreSaturatedNL tail) => AllNodesAreSaturatedNL (NodeListCons (NodeC (TStereoPanner a) (SingleEdge e)) tail)
(AllNodesAreSaturatedNL tail) => AllNodesAreSaturatedNL (NodeListCons (NodeC (TTriangleOsc a) NoEdge) tail)
(AllNodesAreSaturatedNL tail) => AllNodesAreSaturatedNL (NodeListCons (NodeC (TWaveShaper a name) (SingleEdge e)) tail)
#AllNodesAreSaturated Source
class AllNodesAreSaturated (graph :: Graph)
Asserts that all nodes in graph
are saturated. This is
the same as the node-list algorithm, but for a graph.
Instances
(GraphToNodeList graph nodeList, AllNodesAreSaturatedNL nodeList) => AllNodesAreSaturated graph
#NodeIsOutputDevice Source
class NodeIsOutputDevice (node :: Node)
Asserts the node is an output device. Currently, in the web-audio API, this is a loudspeaker or recorder.
Instances
NodeIsOutputDevice (NodeC (TSpeaker a) x)
NodeIsOutputDevice (NodeC (TRecorder a name) x)
- Modules
- FRP.
Event. MIDI - WAGS.
Change - WAGS.
Connect - WAGS.
Control. Functions - WAGS.
Control. MemoizedState - WAGS.
Control. Qualified - WAGS.
Control. Thunkable - WAGS.
Control. Types - WAGS.
Create - WAGS.
Cursor - WAGS.
Debug - WAGS.
Destroy - WAGS.
Disconnect - WAGS.
Graph. Constructors - WAGS.
Graph. Decorators - WAGS.
Graph. Getter - WAGS.
Graph. Optionals - WAGS.
Graph. Parameter - WAGS.
Interpret - WAGS.
Move - WAGS.
MoveNode - WAGS.
Rebase - WAGS.
Rendered - WAGS.
Run - WAGS.
Universe. AudioUnit - WAGS.
Universe. Bin - WAGS.
Universe. BinN - WAGS.
Universe. EdgeProfile - WAGS.
Universe. Graph - WAGS.
Universe. Node - WAGS.
Universe. Skolems - WAGS.
Universe. Universe - WAGS.
Util - WAGS.
Validation