h&@9      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ Safe-Inferred" 9dotparseA parsing error.dotparse:A precisely known error, like leaving out "in" from "let".dotparseAn imprecise error, when we expect a number of different things, but parse something else.dotparseConsume whitespace.dotparse*Consume whitespace after running a parser.dotparseParse a line comment.dotparse-Parse a potentially nested multiline comment.dotparse7Parse a HTML-Like string by counting the angle bracketsdotparse$First character of a dot identifier. dotparsecharacter of a dot identifier. dotparse+Read a starting character of an identifier. dotparse/Read a non-starting character of an identifier. dotparseParse a non-keyword string. dotparseParse a keyword string.dotparse>> runParser quoted (strToUtf8 ""hello"") OK "hello" ""+runParser quoted (strToUtf8 "\"hello/\"\"")OK "hello\"" ""%dotparseoptional separators&dotparseparse wrapping square brackets'dotparseprint wrapping square brackets(dotparseprint wrapping quotes)dotparseparse wrapping square brackets*dotparseprint wrapping curly brackets+dotparsecomma separated Point,dotparse 3http://www.graphviz.org/docs/attr-types/splineType/-dotparse)comma separated rectangle or bounding box.dotparse true | false/dotparseNonEmpty version of many%  !"#$%&'()*+,-./%   !"#$%&')*(+,-./ Safe-Inferred"+?3dotparse7Various configutaion parameters for the chart-svg Chart?dotparse;typical edge information after processing a dot bytestring.Ddotparse;typical node information after processing a dot bytestring.IdotparseA subgraph statement.+Note: each subgraph must have a unique name0runDotParser "subgraph A {A, B, C}" :: StatementStatementSubGraph (SubGraphStatement {subgraphID = Just (ID "A"), subgraphStatements = [StatementNode (NodeStatement {nodeID = ID "A", port = Nothing, nodeAttrs = fromList []}),StatementNode (NodeStatement {nodeID = ID "B", port = Nothing, nodeAttrs = fromList []}),StatementNode (NodeStatement {nodeID = ID "C", port = Nothing, nodeAttrs = fromList []})]})MdotparseEdge statement=runDotParser "A -> B [style=dashed, color=grey]" :: StatementStatementEdge (EdgeStatement {edgeOp = EdgeDirected, leftEdge = EdgeID (ID "A") Nothing, rightEdges = EdgeID (ID "B") Nothing :| [], edgeAttrs = fromList [(ID "color",ID "grey"),(ID "style",ID "dashed")]})Sdotparse?An edgeop is -> in directed graphs and -- in undirected graphs.Vdotparse8An edge can be specified in as a NodeID or as a SubGraphYdotparseNode statement9runDotParser "A [shape=diamond; color=blue]" :: StatementStatementNode (NodeStatement {nodeID = ID "A", port = Nothing, nodeAttrs = fromList [(ID "color",ID "blue"),(ID "shape",ID "diamond")]})^dotparseTop-level attribute statementrunDotParser "graph [overlap=false, splines=spline, size=\"1!\"];" :: StatementStatementAttribute (AttributeStatement {attributeType = GraphType, attributes = fromList [(ID "overlap",ID "false"),(ID "size",IDQuoted "1!"),(ID "splines",ID "spline")]})bdotparseCategory of attributefdotparseA top-level attribute*runDotParser "rankdir=\"BT\"" :: StatementStatementGlobalAttribute (GlobalAttributeStatement {globalAttributeStatement = (ID "rankdir",IDQuoted "BT")})idotparsePort instructions which are optionally associated with an identifierldotparseCompass instructions which are optionally associated with an identifierwdotparse2Identifier as per the dot language specifications.runDotParser "0" :: IDIDInt 0runDotParser "-.123" :: IDIDDouble (-0.123)0runParser dotParse "apple_1'" :: Result Error IDOK (ID "apple_1") "'":set -XQuasiQuotes1runParser dotParse "\"hello\"" :: Result Error IDOK (IDQuoted "hello") ""runDotParser "foo,
the bar and
the baz>" :: IDIDHtml "foo,
the bar and
the baz>"}dotparse6A dot statement as per the dot language specification.dotparseDirected (digraph | graph)dotparseMergeEdges (strict)dotparseRepresentation of a full graphviz graph, as per the dot language specificationdotparseA parser & printer class for a graphviz graph and components of its dot languagedotparse!printing options, for separators.dotparsedefault separatorsdotparsedotParse and then dotPrint:!pretty printing error on failure.This is not an exact parser/printer, so the test re-parses the dotPrint, which should be idempotentdotparse1run a dotParse erroring on leftovers, Fail or Errdotparseglobal attributes lensdotparseattributes lensdotparseDefault Strict is NoMergeEdgesdotparseDefault Directed is Directeddotparse!ID as the equivalent plain String9note that the dot language identifier equivalence law is: x == y if label x == label ydotparse+generate an EdgeOp given the type of graph.dotparse#The edge ID or subgraph ID (if any)dotparseedge IDsdotparselist of edges in a given EdgeStatement, including anonymous SugGraphsdotparseadd a graphviz statement to a dotparse'add a list of graphviz statements to a dotparse!default dot graph as a ByteStringdotparseA default dot graph+import qualified Data.ByteString.Char8 as B3B.putStrLn $ dotPrint defaultDotConfig defaultGraph digraph {" node [height=0.5;shape=circle]2 graph [overlap=false;size="1!";splines=spline] edge [arrowsize=0.5] }dotparserun a dot string through graphviz, supplying arguments and collecting stdoutdotparserun a dot string through graphviz, collecting the augmented dot string outputdotparse(Augment a Graph via the graphviz processdotparse(Augment a Graph via the graphviz processdotparseBounding box ID lensdotparseBounding Box lens as a dotparse nodes lensdotparse/nodes lens ignoring/forgetting port informationdotparse/edges lens ignoring/forgetting port informationdotparse1edge & attribute map ignores anonymous subgraphsdotparse-A specific attribute for all nodes in a graphdotparsenode position (as a Point)dotparse Specific attribute for all edgesdotparsenode width attributesdotparseedge width attributesdotparseedge path attributesdotparse'Create a list of NodeInfo from a graph.dotparse&Create a list of EdgeInfo from a graphdotparse 0https://graphviz.org/docs/attr-types/splineType/ format of the example is end point point and then triples (5,8,11 lengths are 1, 2 and 3 cubics)dotparse8create Statements from a (no edge label) algebraic graphdotparsedefault parametersdotparse convert a * processed via the graphviz commands to a dotparse convert a * processed via the graphviz commands to a  using the default ChartConfig.dotparse/Convert an algebraic graph to a dotparse graph.dotparseConvert an algebraic graph to a dotparse graph, starting with the .dotparseAttribute collectionsrunDotParser "[shape=diamond; color=blue] [label=label]" :: Map.Map ID IDfromList [(ID "color",ID "blue"),(ID "label",ID "label"),(ID "shape",ID "diamond")]A given entity can have multiple attribute lists. For simplicity, these are mconcat'ed on parsing.dotparse'Attribute key-value pair of identifiers'runDotParser "shape=diamond" :: (ID,ID)(ID "shape",ID "diamond"),runDotParser "fontname=\"Arial\"" :: (ID,ID) (ID "fontname",IDQuoted "Arial")3456789:;<=>?@ABCDEHFGIJKLMNOPQRSTUVWXYZ[\]^_a`bcdefghijklmnopqrstuvwxyz{|}~wxyz{|lmnopqrstuvijkbcde^_a`YZ[\]VWXSTUMNOPQR}~IJKLfghDEHFG?@ABC3456789:;<=> Safe-Inferred-3456789:;<=>IJKLMNOPQRSTUVWXYZ[\]^_a`bcdeijklmnopqrstuvwxyz{|}~wxyz{|lmnopqrstuvijkbcde^_a`YZ[\]VWXSTUMNOPQR}~IJKL3456789:;<=> Safe-Inferred"2S dotparseA class dependency.dotparse,Names of the various classes used in numhaskdotparse&List of all dependencies (as at v0.11)dotparse"List of classes to use in diagram.dotparse1Names of the modules where each class is located.dotparseList of dependencies to draw.dotparse%NumHask Classes as an algebraic graphdotparseNumHask statements in a dot Graph with box shapes for the nodes.dotparse( after being positionally processed via dotparseConvert a node ID to a label for chart-svg charts Doing this directly in dot doesn't quite work because the engines get the width of the link wrong.dotparse"A chart-svg chart with label links writeChartOptions "other/nh.svg" (graphToChart toLink (dotGraphNH' Directed)) other/nh.svgNumHask Example55 Safe-Inferred"8dotparseminimal definitionrunDotParser ex0 :: GraphGraph {strict = Last {getLast = Just NoMergeEdges}, directed = Last {getLast = Just UnDirected}, graphid = Last {getLast = Nothing}, nodeAttributes = fromList [], graphAttributes = fromList [], edgeAttributes = fromList [], globalAttributes = fromList [], nodes = [], edges = [], subgraphs = []}9testDotParser (Proxy :: Proxy Graph) defaultDotConfig ex0dotparse other/ex1.svgExampledotparse other/ex2.svgExampledotparse other/ex3.svgExampledotparse other/ex4.svgExampledotparse other/ex5.svgExampledotparse other/ex6.svgExampledotparse other/ex7.svgExampledotparse other/ex8.svgExampledotparse other/ex9.svgExampledotparse other/ex10.svgExampledotparse other/ex11.svgExampledotparse other/ex12.svgExampledotparse other/ex13.svgExampledotparse other/ex14.svgExampledotparse other/ex15.svgExampledotparseTest all the examplesdotparseRender all the examplesdotparsealgebraic graph exampleexGraph = defaultGraph & addStatements (toStatements Directed (Char8.pack . show <$> exAGraph))(exGraphAugmented <- processGraph exGraphwriteChartOptions "other/exga.svg" (graphToChartWith defaultChartConfig exGraphAugmented) other/exga.svgaugmentation example       !"#$%&'()*+,-./01234567899:;<=>?@ABCDDEFGHHIJKLLMNOOPQRSTUVWWXYYZ[\]]^_`abcddeffghijklmnopqrsstuvwxyz{|}~~%dotparse-0.0.3-9fs69AfQjzSIR12Za6WDjjDotParse.FlatParse.THDotParse.FlatParseDotParseDotParse.TypesDotParse.Examples.NumHaskDotParse.ExamplesErrorPrecise Imprecisewstoken lineCommentmultilineCommenthtmlLikeisValidStartChar isValidCharidentStartChar identCharsymbolkeywordsymbol'keyword'identident'errorPosmerge prettyErrorcutcut' $fEqError $fShowErrorSpline splineEnd splineStartsplineP1 splineTriples testParser runParser_intdoublesignedquotedsepP wrapSquarePwrapSquarePrintwrapQuotePrint wrapCurlyPwrapCurlyPrintpointPsplinePrectPboolP nonEmptyP $fEqSpline $fShowSpline$fGenericSpline ChartConfig chartHeight chartScaleedgeSize chartColorchartBackgroundColor nodeHeightnodeSizevshifttextSizelabelfEdgeInfoelabelewidthcurveNodeInfonlabelnwidthposSubGraphStatement subgraphIDsubgraphStatements EdgeStatementedgeOpleftEdge rightEdges edgeAttrsEdgeOp EdgeDirectedEdgeUndirectedEdgeID EdgeSubGraph NodeStatementnodeIDport nodeAttrsAttributeStatement attributeType attributes AttributeType GraphTypeNodeTypeEdgeTypeGlobalAttributeStatementglobalAttributeStatementPortportIDCompassCompassN CompassNECompassE CompassSECompassS CompassSWCompassW CompassNWCompassCCompass_IDIDIntIDDoubleIDQuotedIDHtml Statement StatementNode StatementEdgeStatementGlobalAttributeStatementAttributeStatementSubGraphDirected UnDirectedStrict MergeEdges NoMergeEdgesGraphstrictdirectedgraphidnodeAttributesgraphAttributesedgeAttributesglobalAttributesnodesedges subgraphsdotPrintdotParse DotConfig topLevelSep statementSepattSep subGraphSepdefaultDotConfig testDotParser runDotParsergattLattL defStrict defDirectedlabel fromDirectededgeID edgeIDsNamededgeIDs addStatement addStatements defaultGraphprocessDotWith processDotprocessGraphWith processGraphbbL nodesPortLnodesLedgesLnodesAnodePosedgesA nodeWidth edgeWidth edgeSplinenodeInfoedgeInfo splinePath toStatementsdefaultChartConfiggraphToChartWith graphToCharttoDotGraphWith toDotGraph$fDotParseRect$fDotParsePoint$fDotParseStrict$fDotParseDirected $fDotParseMap $fDotParse(,) $fDotParseID$fDotParseCompass$fDotParsePort"$fDotParseGlobalAttributeStatement$fDotParseAttributeType$fDotParseAttributeStatement$fDotParseNodeStatement$fDotParseEdgeOp$fDotParseSubGraphStatement$fDotParseEdgeStatement$fDotParseEdgeID$fDotParseStatement$fDotParseGraph $fMonoidGraph$fSemigroupGraph$fGenericChartConfig $fEqEdgeInfo$fShowEdgeInfo$fGenericEdgeInfo $fEqNodeInfo$fShowNodeInfo$fGenericNodeInfo $fEqGraph $fShowGraph$fGenericGraph$fEqSubGraphStatement$fShowSubGraphStatement$fGenericSubGraphStatement $fEqStatement$fShowStatement$fGenericStatement$fEqEdgeStatement$fShowEdgeStatement$fGenericEdgeStatement $fEqEdgeID $fShowEdgeID$fGenericEdgeID $fEqEdgeOp $fShowEdgeOp$fGenericEdgeOp$fEqNodeStatement$fShowNodeStatement$fGenericNodeStatement$fEqAttributeStatement$fShowAttributeStatement$fGenericAttributeStatement$fEqAttributeType$fShowAttributeType$fGenericAttributeType$fEqGlobalAttributeStatement$fShowGlobalAttributeStatement!$fGenericGlobalAttributeStatement$fEqPort $fShowPort $fGenericPort $fEqCompass $fShowCompass$fGenericCompass$fEqID$fShowID $fGenericID$fOrdID $fEqDirected$fShowDirected$fGenericDirected $fEqStrict $fShowStrict$fGenericStrict $fEqDotConfig$fShowDotConfig$fGenericDotConfig Dependency_class_depClassMagmaUnital Associative Commutative Invertible Idempotent AbsorbingGroup AbelianGroupAdditive SubtractiveMultiplicativeDivisive DistributiveSemiringRingIntegralDomainFieldExpField QuotientFieldUpperBoundedFieldLowerBoundedField TrigFieldAdditiveActionSubtractiveActionMultiplicativeActionDivisiveActionActionsJoinSemiLatticeMeetSemiLatticeLatticeBoundedJoinSemiLatticeBoundedMeetSemiLatticeBoundedLatticeIntegralRatioBasis DirectionEpsilon dependencies classesNH classesModuledependenciesNHgraphNHG dotGraphNH dotGraphNH'toLink writeNHChart$fShowDependency$fEqDependency$fOrdDependency $fShowClass $fEqClass $fOrdClassex0ex1ex2ex3ex4ex5ex6ex7ex8ex9ex10ex11ex12ex13ex14ex15testAllsvgAllexAGraphbytestring-0.11.3.1Data.ByteString.Internal ByteString defaultBSbb_-numhask-space-0.11.0.1-1kUmVe9hH1GAaqb1JbJ7N1NumHask.Space.RectRect getEdges_(chart-svg-0.4.1.1-IWqM7MKR0pA4JJOsSfAD0k Chart.Markup ChartOptions