h&      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Specification of color schemes.(c) Ivan Lazar Miljenovic3-Clause BSD-styleIvan.Miljenovic@gmail.com Safe-Inferred/graphviz+All of these have a minimum level value of 3, with a maximum of 9 unless otherwise specified.graphviz Maximum of 8.graphviz Maximum of 11.graphviz Maximum of 8.graphviz Maximum of 12.graphviz Maximum of 8.graphviz Maximum of 11.graphviz Maximum of 11.graphviz Maximum of 111; note that the last two are listed after the  values in the documentation.graphviz Maximum of 11-; note that the last two are listed first.graphviz Maximum of 111; note that the last two are listed after the  values in the documentation.graphviz Maximum of 11.graphviz Maximum of 11.graphviz Maximum of 8.graphviz Maximum of 12.graphviz Maximum of 11.graphvizSpecify which colour palette and how many colours it has. Note the allowed values for the different s.graphviz8This represents the color schemes that Graphviz accepts.*Graphviz-specific exceptions(c) Ivan Lazar Miljenovic3-Clause BSD-styleIvan.Miljenovic@gmail.com Safe-Inferred60graphvizExceptions that arise from using this library fall into four categories:"Unable to parse provided Dot code.Dot code is not valid UTF-8.6An error when trying to run an external program (e.g. dot).0Treating a non-custom Attribute as a custom one.  Printing and parsing state.(c) Ivan Lazar Miljenovic3-Clause BSD-styleIvan.Miljenovic@gmail.com Safe-Inferred2graphviz?Several aspects of Dot code are either global or mutable state.graphvizIf , allow fallbacks for attributes that don't match known specification when parsing.graphvizThe default separators for .graphvizThe default separators for .Internal utility functions(c) Ivan Lazar Miljenovic3-Clause BSD-styleIvan.Miljenovic@gmail.com Safe-Inferred"6r graphviz First character of a non-quoted  must match this.graphvizThe rest of a non-quoted  must match this.graphvizDetermine if this String represents a number. Boolean parameter determines if exponents are considered part of numbers for this.graphvizThis assumes that  is .graphviz/Determine if this String represents an integer.graphviz9Graphviz requires double quotes to be explicitly escaped.graphviz*Remove explicit escaping of double quotes.graphvizThe following are Dot keywords and are not valid as labels, etc. unquoted.graphviz Fold over s; first param is for  , second for .Helper functions for Parsing.*(c) Matthew Sackman, Ivan Lazar Miljenovic3-Clause BSD-styleIvan.Miljenovic@gmail.com Safe-Inferred"A'graphvizA ReadS-like type alias.graphviz A variant of  where it is assumed that the provided parsing function consumes all of the 8 input (with the exception of whitespace at the end).graphvizParse the required value, returning also the rest of the input 2 that hasn't been parsed (for debugging purposes).graphvizIf unable to parse Dot code properly,  a .graphvizIf unable to parse Dot code properly,  a <, with the error containing the remaining unparsed code..graphvizParse the required value with the assumption that it will parse all of the input .graphviz7Use this when you do not want numbers to be treated as  values.graphvizParse a  that doesn't need to be quoted.graphviz)Used when quotes are explicitly required;graphvizFlag indicates whether to check whether the number is actually a floating-point value.graphvizParse a floating point number that actually contains decimals. Bool flag indicates whether values that need to be quoted are parsed.graphvizBool flag indicates whether to allow parsing exponentiated term, as this is only allowed when quoted.graphvizAssumes that any letter is ASCII for case-insensitive comparisons.graphviz)Parses at least one whitespace character.graphviz*Parses zero or more whitespace characters.graphviz2Parse and discard optional surrounding whitespace.graphvizParse a  where the provided s (as well as " and \%) are escaped and the second list of s are those that are not permitted. Note: does not parse surrounding quotes. The  value indicates whether empty s are allowed or not.graphvizParses a newline.graphvizConsume all whitespace and newlines until a line with non-whitespace is reached. The whitespace on that line is not consumed.graphvizParses and returns all characters up till the end of the line, but does not touch the newline characters.graphvizThe opposite of 4.graphvizTry to parse a list of the specified type; returns an empty list if parsing fails.graphviz-Return an empty list if parsing a list fails.graphvizIgnores  and assumes 'not . null . versionBranch' (usually you want 'length . versionBranch == 2') and that all such values are non-negative.   !"#$%&'()*+-,1.0/23456789:;<=>?C@BAD   !"#$%&'()*+-,1.0/23456789:;<=>?C@BADPre-process imported Dot code.(c) Ivan Lazar Miljenovic3-Clause BSD-styleIvan.Miljenovic@gmail.com Safe-InferredFcgraphvizRemove unparseable features of Dot, such as comments and multi-line strings (which are converted to single-line strings).graphvizParse out comments and make quoted strings spread over multiple lines only over a single line. Should parse the entire input .graphvizParses an unwanted part of the Dot code (comments and pre-processor lines; also un-splits lines).graphvizRemove pre-processor lines (that is, those that start with a #). Will consume the newline from the beginning of the previous line, but will leave the one from the pre-processor line there (so in the end it just removes the line).graphvizParse //-style comments.graphvizParse @@-style comments.graphvizLines can be split with a \ at the end of the line..Helper functions for converting to Dot format.(c) Ivan Lazar Miljenovic3-Clause BSD-styleIvan.Miljenovic@gmail.com Safe-Inferred"NgraphvizA class used to correctly print parts of the Graphviz Dot language. Minimal implementation is .graphvizThe unquoted representation, for use when composing values to produce a larger printing value.graphvizThe actual quoted representation; this should be quoted if it contains characters not permitted a plain ID String, a number or it is not an HTML string. Defaults to .graphvizThe correct way of representing a list of this value when printed; not all Dot values require this to be implemented. Defaults to Haskell-like list representation.graphvizThe quoted form of =; defaults to wrapping double quotes around the result of  (since the default implementation has characters that must be quoted).graphviz0A type alias to indicate what is being produced.graphviz!Correctly render Graphviz output.graphvizConvert to DotCode; note that this has no indentation, as we can only have one of indentation and (possibly) infinite line lengths.graphviz For use with OverloadedStrings) to avoid ambiguous type variable errors.graphviz For use with OverloadedStrings) to avoid ambiguous type variable errors.graphvizCheck to see if this  needs to be quoted or not.graphviz(Escape quotes in Strings that need them.graphvizEscape quotes and quote Texts that need them (including keywords).graphviz&Escape the specified chars as well as ".graphviz&Escape the specified chars as well as "' and then wrap the result in quotes.graphvizEnsure the provided characters are all escaped. Note that we cannot convert to  immediately because * needs to pass the result from this to 1 to determine if it needs to be quoted or not.graphvizIgnores  and assumes 'not . null . versionBranch' (usually you want 'length . versionBranch == 2').EFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~EFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Available command-line programs(c) Ivan Lazar Miljenovic3-Clause BSD-styleIvan.Miljenovic@gmail.com Safe-Inferred"T. graphvizThe available Graphviz commands. The following directions are based upon those in the Graphviz man page (available online at  !http://graphviz.org/pdf/dot.1.pdf$, or if installed on your system  man graphviz). Note that any command can be used on both directed and undirected graphs.When used with the Layout attribute, it overrides any actual command called on the dot graph.graphviz6For hierachical graphs (ideal for directed graphs).graphvizFor symmetric layouts of graphs (ideal for undirected graphs).graphvizFor radial layout of graphs.graphvizFor circular layout of graphs.graphviz/Spring-model approach for undirected graphs.graphviz+As with Fdp, but ideal for large graphs.graphvizFilter for drawing clustered graphs, requires Graphviz >= 2.28.0.graphvizDraw clustered graphs as treemaps, requires Graphviz >= 2.28.0. $Internal Attribute value definitions(c) Ivan Lazar Miljenovic3-Clause BSD-styleIvan.Miljenovic@gmail.com Safe-Inferred"V1graphvizSpecifies a name for ports (used also in record-based and HTML-like labels). Note that it is not valid for a  value to contain a colon (:.) character; it is assumed that it doesn't.graphviz5When attached to a node in a DotEdge definition, the  and the  can be in separate quotes.Specification of X11 colors.(c) Ivan Lazar Miljenovic3-Clause BSD-styleIvan.Miljenovic@gmail.com Safe-Inferred"YgraphvizThe X11 colors that Graphviz uses. Note that these are slightly different from the "normal" X11 colors used (e.g. the inclusion of Crimson<). Graphviz's list of colors also duplicated almost all Gray colors with Grey ones; parsing of an  which is specified using "grey" will succeed, even for those that don't have the duplicate spelling (e.g. DarkSlateGray1).graphvizEquivalent to setting Style [SItem Invisible []].graphviz Convert an  to its equivalent Colour value. Note that it uses  because of ; all other  values are completely opaque. Specification of SVG colors.(c) Ivan Lazar Miljenovic3-Clause BSD-styleIvan.Miljenovic@gmail.com Safe-Inferred"cgraphvizThe SVG colors that Graphviz uses. Graphviz's list of colors also duplicated all *Gray* colors with *Grey* ones; parsing of an . which is specified using "grey" will succeed.graphviz Convert an  to its equivalent  value.Specification of Brewer colors.(c) Ivan Lazar Miljenovic3-Clause BSD-styleIvan.Miljenovic@gmail.com Safe-Inferred"fgraphvizThis value should be between 1 and the level of the  being used.((3Specification of Color-related types and functions.(c) Ivan Lazar Miljenovic3-Clause BSD-styleIvan.Miljenovic@gmail.com Safe-Inferred"mT graphviz/More easily convert named colors to an overall  value.graphviz&Bool is for whether quoting is needed.graphvizA # tagged with an optional weighting.graphvizMust be in range  0 <= W <= 1.graphviz#The sum of the optional weightings must sum to at most 1.graphvizDefining a color for use with Graphviz. Note that named colors have been split up into 3s and those based upon the Brewer color schemes.graphvizThe ,  and  values must all be  0 <= x <=1.graphvizFor colors without weightings.graphviz(For a list of colors without weightings.graphvizAttempt to convert a  into a - value with an alpha channel. The use of % is because the RGB values of the s haven't been stored here (primarily for licensing reasons).graphviz Convert a  value to an  .graphviz Convert an  to an  '. The exception to this is for any  which has alphaChannel ac == 0; these are converted to  X11Color  (note that the  instance for such an  is  "transparent").graphvizThe  of a  value. .Specification of HTML-like types for Graphviz.(c) Ivan Lazar Miljenovic3-Clause BSD-styleIvan.Miljenovic@gmail.com Safe-Inferred"?graphviz Valid for  graphviz Valid for  , .graphvizWhich sides of a border in a cell or table should be drawn, if a border is drawn.graphvizSpecifies how an image will use any extra space available in its cell. If undefined, the image inherits the value of the  ImageScale attribute.graphvizDefault value.graphvizSpecifies vertical placement. When an object is allocated more space than required, this value determines where the extra space is placed above and below the object.graphvizDefault value.graphvizSpecifies horizontal placement. When an object is allocated more space than required, this value determines where the extra space is placed left and right of the object.graphvizDefault value.graphviz values only; aligns lines of text using the full cell width. The alignment of a line is determined by its (possibly implicit) associated   element.graphvizNote that not all  values are valid everywhere: see the comments for each one on where it is valid.graphviz Valid for:  , ,  .graphviz Valid for: .graphviz Valid for:   (including  ), ,  .graphviz Valid for:  , . Default is 1; 0 represents no border.graphviz Valid for:  . Default is 1; 0 represents no border.graphviz Valid for:  , . Default is 2.graphviz Valid for:  , . Default is 2 ; maximum is 127.graphviz Valid for:  , .graphviz Valid for: . Default is 1.graphviz Valid for:  . Requires Graphviz >= 2.40.1graphviz Valid for:  ,  .graphviz Valid for:  , . Default is .graphviz Valid for:  , . Default is 0. Requires Graphviz >= 2.40.1graphviz Valid for:  , .graphviz Valid for:  , .graphviz Valid for:  , . Requires Graphviz >= 2.29.0graphviz Valid for:  ,  .graphviz Valid for:  , .graphviz Valid for:  . Requires Graphviz >= 2.40.1graphviz Valid for: .graphviz Valid for: .graphviz Valid for:  , . Default is [, , , ]. Requires Graphviz >= 2.40.1graphviz Valid for: .graphviz Valid for:  , . Requires Graphviz >= 2.40.1graphviz Valid for:  , .graphviz Valid for:  , . Has an alias of TOOLTIP.graphviz Valid for:  , .graphviz Valid for:  , .graphviz;The various HTML-like label-specific attributes being used.graphvizThe path to an image; accepted  are  and .graphviz)Cells either recursively contain another  $ or else a path to an image file.graphvizShould be between  or ' values, requires Graphviz >= 2.29.0graphviz A row in a  . The list of & values is assumed to be non-empty.graphvizShould be between ' values, requires Graphviz >= 2.29.0 graphvizA table in HTML-like labels. Tables are optionally wrapped in overall FONT tags. graphviz Optional FONT attributes.  [] denotes empty FONT tags;  denotes no such tags. graphviz%This list is assumed to be non-empty. graphvizRequires Graphviz >= 2.38.0. graphviz"Textual items in HTML-like labels. graphvizOnly accepts an optional  3; defined this way for ease of printing/parsing. graphviz%Only available in Graphviz >= 2.28.0. graphvizRepresents a textual component of an HTML-like label. It is assumed that a  4 list is non-empty. It is preferable to "group"   values together rather than have individual ones. Note that when printing, the individual values are concatenated together without spaces, and when parsing anything that isn't a tag is assumed to be a  : that is, something like "

" is parsed as: ![Newline [], Str " ", Newline []] graphvizThe overall type for HTML-like labels. Fundamentally, HTML-like values in Graphviz are either textual (i.e. a single element with formatting) or a table. Note that   values can be nested via .graphvizOnly to be used when the  instance of a. matches the HTML syntax (i.e. numbers and Html.* values;  values also seem to work).graphvizParses an HTML-compatible ., de-escaping known characters. Note: this will7 fail if an unknown non-numeric HTML-escape is used.graphvizThe characters that need to be escaped and what they need to be replaced with (sans &).graphvizFlip the order and add extra values that might be escaped. More specifically, provide the escape code for spaces ("nbsp") and apostrophes ("apos"&) since they aren't used for escaping.graphvizPrint something like  FOOATTR="ATTR_VALUE"value /FOOgraphvizPrint something like  FOOATTR="ATTR_VALUE"/graphvizParse something like  FOOATTR="ATTR_VALUE"value /FOOgraphvizParse something like  FOOvalue /FOO.graphvizParse something like  FOOATTR="ATTR_VALUE"/ +Values for use with the Attribute data type(c) Ivan Lazar Miljenovic3-Clause BSD-styleIvan.Miljenovic@gmail.com Safe-Inferred" graphvizDetermine how the Width and Height) attributes specify the size of nodes. graphvizNodes will be the smallest width and height needed to contain the label and any possible image. Width and Height" are the minimum allowed sizes. graphvizWidth and Height dictate the size of the node with a warning if the label cannot fit in this. graphvizWidth and Height dictate the size of the shape only and the label can expand out of the shape (with a warning). Requires Graphviz >= 2.38.0. graphvizIf set, normalizes coordinates such that the first point is at the origin and the first edge is at the angle if specified. graphvizEquivalent to   0. graphvizAngle of first edge when normalized. Requires Graphviz >= 2.32.0. graphvizA numeric type with an explicit separation between integers and floating-point values. graphvizA list of search paths. graphvizOnly valid for Nodes. graphviz For use with  . graphvizNodes and Edges graphvizNodes and Edges graphvizNodes and Edges graphvizNodes and Edges graphvizNodes and Edges graphvizNodes and Clusters graphvizRectangularly-shaped Nodes and Clusters; requires Graphviz >= 2.30.0 graphviz>Elliptically-shaped Nodes only; requires Graphviz >= 2.30.0 graphviz Nodes only graphvizNodes and Clusters graphviz*Edges only; requires Graphviz >= 2.29.0 graphviz,Nodes, Clusters and Graphs, for use with  GradientAngle ; requires Graphviz >= 2.29.0 graphvizDevice Dependent graphviz&An individual style item. Except for  , the [] should be empty. graphviz4Geometries of shapes are affected by the attributes Regular,  Peripheries and  Orientation. graphvizHas synonyms of rect and  rectangle. graphvizAlso affected by Sides, Skew and  Distortion. graphvizHas synonym of oval. graphvizOnly affected by  Peripheries, Width and Height. graphvizHas synonym of none. Recommended for  s. graphvizRequires Graphviz >= 2.32.0. graphvizRequires Graphviz >= 2.36.0. graphvizRequires Graphviz >= 2.30.0. graphvizRequires Graphviz >= 2.30.0. graphvizRequires Graphviz >= 2.30.0. graphvizRequires Graphviz >= 2.30.0. graphvizRequires Graphviz >= 2.30.0. graphvizRequires Graphviz >= 2.30.0. graphvizRequires Graphviz >= 2.30.0. graphvizRequires Graphviz >= 2.30.0. graphvizRequires Graphviz >= 2.30.0. graphvizRequires Graphviz >= 2.30.0. graphvizRequires Graphviz >= 2.30.0. graphvizRequires Graphviz >= 2.30.0. graphvizRequires Graphviz >= 2.30.0. graphvizRequires Graphviz >= 2.30.0. graphvizRequires Graphviz >= 2.30.0. graphvizRequires Graphviz >= 2.30.0. graphvizRequires Graphviz >= 2.30.0. graphvizRequires Graphviz >= 2.30.0. graphvizRequires Graphviz >= 2.30.0. graphvizRequires Graphviz >= 2.30.0. graphviz%Must specify the record shape with a  . graphviz%Must specify the record shape with a  . graphvizSpecify the root node either as a Node attribute or a Graph attribute. graphvizFor Nodes only graphvizFor Nodes only graphvizFor Graphs only graphvizThe number of points in the list must be equivalent to 1 mod 3; note that this is not checked. graphvizUpper-case first character is major order; lower-case second character is minor order. graphviz,Controls how (and if) edges are represented.For Dot, the default is  *; for all other layouts the default is  . graphviz Except for Dot,, requires non-overlapping nodes (see  ). graphviz(Does not handle ports or edge labels in Dot. graphvizRequires Graphviz >= 2.30.0. graphvizFdp only graphviz1Sort by cols, sort by user, number of rows/cols graphviz/If non-negative, then packs; otherwise doesn't. graphviz'Draw outgoing edges in order specified. graphviz'Draw incoming edges in order specified. graphviz7A list of layer names. The names should all be unique   values, and when printed will use an arbitrary character from  defLayerSep5. The values in the list are implicitly numbered  1, 2, .... graphviz>You should not have any layer separator characters for the  $ option, as they won't be parseable. graphvizShould not be a number or "all". graphvizHow to deal with node overlaps. Defaults to   except for Fdp and Sfdp./The ability to specify the number of tries for Fdp')s initial force-directed technique is not supported (by default, Fdp uses 9, passes of its in-built technique, and then   Nothing).For Sfdp, the default is   (Just 0). graphviz0Remove overlaps by uniformly scaling in x and y. graphviz.Remove overlaps by separately scaling x and y. graphvizRequires the Prism library to be available (if not, this is equivalent to  ).  is equivalent to  1000. Influenced by OverlapScaling. graphvizRequires Graphviz >= 2.30.0. graphvizScale layout down as much as possible without introducing overlaps, assuming none to begin with. graphviz=Uses quadratic optimization to minimize node displacement. graphviz Only when mode ==  graphviz Can only be  for Dim 3 or greater. graphvizInput to Graphviz only: specify that the node position should not change. graphviz/How to treat a node whose name is of the form " |edgelabel|*2" as a special node representing an edge label. graphviz No effect graphviz%Make node close to center of neighbor graphviz)Make node close to old center of neighbor graphvizUse a two-step process. graphvizSpecifies the sub-values of a record-based label. By default, the cells are laid out horizontally; use   to change the orientation of the fields (can be applied recursively). To change the default orientation, use  . graphviz)Will result in no label for that cell. graphviz+A RecordFields value should never be empty. graphvizIf   is used, the  < value is the entire "shape"; if anything else except   is used then the  ! is embedded within the shape. graphviz#For nodes only; requires either   or   as the shape. graphvizFor Neato unless indicated otherwise. graphvizFor Sfdp, requires Graphviz >= 2.32.0. graphvizFor Sfdp, requires Graphviz >= 2.32.0. graphviz.Maximum width and height of drawing in inches. graphvizIf Nothing., then the height is the same as the width. graphvizIf drawing is smaller than specified size, this value determines whether it is scaled up. graphvizThe mapping used for FontName values in SVG output.!More information can be found at  'http://www.graphviz.org/doc/fontfaq.txt. graphviz%Use the legal generic SVG font names. graphvizUse PostScript font names. graphviz Use fontconfig font conventions. graphviz Either a  or a (2D)   (i.e. created with  )."Whilst it is possible to create a   value with either a third co-ordinate or a forced position, these are ignored for printing/parsing.An optional prefix of '+' is allowed when parsing. graphviz Only when mode ==  . graphviz.Specify where to place arrow heads on an edge. graphvizDraw a directed edge with an arrow to the node it's pointing go. graphvizDraw a reverse directed edge with an arrow to the node it's coming from. graphviz%Draw arrows on both ends of the edge. graphvizDraw an undirected edge. graphvizIf  , then sub-graphs that are clusters are given special treatment.   and   currently appear to be identical and turn off the special cluster processing. graphviz.Should only have 2D points (i.e. created with  ). graphvizSome  Attribute"s (mainly label-like ones) take a  argument that allows for extra escape codes. This library doesn't do any extra checks or special parsing for these escape codes, but usage of   rather than  indicates that the Graphviz tools will recognise these extra escape codes for these  Attributes.The extra escape codes include (note that these are all Strings): \N,Replace with the name of the node (for Node  Attributes).\G-Replace with the name of the graph (for Node  Attributes) or the name of the graph or cluster, whichever is applicable (for Graph, Cluster and Edge  Attributes).\EReplace with the name of the edge, formed by the two adjoining nodes and the edge type (for Edge  Attributes).\T>Replace with the name of the tail node (for Edge  Attributes).\H>Replace with the name of the head node (for Edge  Attributes).\L)Replace with the object's label (for all  Attributes). Also, if the  Attribute in question is  ,  HeadLabel or  TailLabel, then \n, \l and \r split the label into lines centered, left-justified and right-justified respectively.graphvizPrint a  5 value as expected within a Record data structure. graphvizCreate a point with only x and y values.graphviz Note that  overlap=false defaults to   Nothing, but if the Prism library isn't available then it is equivalent to  .   Arrow types(c) Ivan Lazar Miljenovic3-Clause BSD-styleIvan.Miljenovic@gmail.com Safe-Inferred" graphvizRepresents which side (when looking towards the node the arrow is pointing to) is drawn. graphviz"What modifications to apply to an  . graphvizDot has a basic grammar of arrow shapes which allows usage of up to 1,544,761 different shapes from 9 different basic  s. Note that whilst an explicit list is used in the definition of  , there must be at least one tuple and a maximum of 4 (since that is what is required by Dot). For more information, see: (http://graphviz.org/doc/info/arrows.htmlThe 19 basic arrows shown on the overall attributes page have been defined below as a convenience. Parsing of the 5 backward-compatible special cases is also supported. graphvizApply no modifications to an  . graphviz  and   &Definition of the Graphviz attributes.*(c) Matthew Sackman, Ivan Lazar Miljenovic3-Clause BSD-styleIvan.Miljenovic@gmail.com Safe-Inferred" graphvizIf performing any custom pre-/post-processing on Dot code, you may wish to utilise some custom  &. These are wrappers around the   constructor (and thus   is just an alias for  ).You should ensure that   is . for any potential custom attribute name. graphviz0The name for an UnknownAttribute; must satisfy  . graphvizAttributes are used to customise the layout and design of Dot graphs. Care must be taken to ensure that the attribute you use is valid, as not all attributes can be used everywhere. graphviz Valid for: G; Default: 0.99; Minimum: 0.0; Notes:  only graphviz Valid for: GC; Default: 0.3; Minimum: 0; Notes: ,  only graphviz Valid for: ENGC; Default: none; Notes: svg, postscript, map only graphviz Valid for: NC; Default: 1.0; Minimum: >0; Notes: " only, requires Graphviz >= 2.30.0 graphviz Valid for: E; Default:  graphviz Valid for: E; Default: 1.0; Minimum: 0.0 graphviz Valid for: E; Default:  graphviz Valid for: G; Default: none; Notes : xdot only graphviz Valid for: G; Notes : write only graphviz Valid for: GC; Default: [] graphviz Valid for: G; Default: ; Parsing Default:  graphviz Valid for: G; Default:  ; Notes:  only graphviz Valid for: ENC; Default: [ (  ) Nothing] graphviz Valid for: ENCG; Default:  graphviz Valid for: ENG; Default: "" graphviz Valid for: G; Default: ; Parsing Default: ; Notes:  only graphviz Valid for: G; Default: ; Parsing Default:  graphviz Valid for: E; Default: ; Parsing Default: ; Notes:  only graphviz Valid for: E; Default: ; Parsing Default:  graphviz Valid for: G; Default: 1+(avg. len)*sqrt(abs(V)) (unable to statically define); Minimum: The value of  .; Notes:  only, only if    graphviz Valid for: G; Default: 2; Minimum: 2; Notes : maximum of 10; , ,  only graphviz Valid for: G; Default: 2; Minimum: 2; Notes : maximum of 10; , ,  only graphviz Valid for: E; Default:   (directed),   (undirected) graphviz Valid for: G; Default:  ; Parsing Default:  ; Notes:  only graphviz Valid for: N; Default: 0.0; Minimum: -100.0 graphviz Valid for: G; Default: 96.0, 0.0; Notes4: svg, bitmap output only; "resolution" is a synonym graphviz Valid for: E; Default: ""; Notes: svg, map only graphviz Valid for: E; Default: none; Notes: svg, map only graphviz Valid for: E; Default: ""; Notes: svg, cmap only graphviz Valid for: G; Default: .0001 * # nodes (mode ==  ), .0001 (mode ==  ); Notes:  only graphviz Valid for: G; Default:   3; Notes: not  graphviz Valid for: NEC; Default: [ (  LightGray ) Nothing] (nodes), [ (  ) Nothing] (clusters) graphviz Valid for: N; Default:  ; Parsing Default:  graphviz Valid for: ENGC; Default:   graphviz Valid for: ENGC; Default:  "Times-Roman" graphviz Valid for: G; Default:  ; Notes : svg only graphviz Valid for: G; Default: system dependent graphviz Valid for: ENGC; Default: 14.0; Minimum: 1.0 graphviz Valid for: G; Default: ; Parsing Default: ; Notes : only for  ( attributes, requires Graphviz >= 2.29.0 graphviz Valid for: NCG; Default: 0; Notes: requires Graphviz >= 2.29.0 graphviz Valid for: N; Default: ""; Notes:  only graphviz Valid for: E; Default: ""; Notes: svg, map only graphviz Valid for: E; Notes): write only, requires Graphviz >= 2.30.0 graphviz Valid for: E; Default: ; Parsing Default:  graphviz Valid for: E; Default:   "" graphviz Valid for: E; Default:   graphviz Valid for: E; Default: none; Notes: svg, map only graphviz Valid for: E; Default: ""; Notes: svg, cmap only graphviz Valid for: N; Default: 0.5; Minimum: 0.02 graphviz Valid for: GNE; Default: ""; Notes: svg, postscript, map only graphviz Valid for: N; Default: "" graphviz Valid for: G; Default:   []; Notes: Printing and parsing is OS-specific, requires Graphviz >= 2.29.0 graphviz Valid for: N; Default:  ; Parsing Default:  graphviz Valid for: N; Default: none; Notes: ,  only, a value of 0 is equivalent to being 72, requires Graphviz >= 2.36.0 graphviz Valid for: ENGC; Default:   "\N" (nodes),   "" (otherwise) graphviz Valid for: E; Default: ""; Notes: svg, map only graphviz Valid for: G; Default:  ; Notes: " only, requires Graphviz >= 2.28.0 graphviz Valid for: E; Default: -25.0; Minimum: -180.0 graphviz Valid for: E; Default: 1.0; Minimum: 0.0 graphviz Valid for: E; Default: ; Parsing Default:  graphviz Valid for: E; Default:   graphviz Valid for: E; Default:  "Times-Roman" graphviz Valid for: E; Default: 14.0; Minimum: 1.0 graphviz Valid for: GC; Default:  graphviz Valid for: GCN; Default:   (clusters),   (root graphs),   (nodes) graphviz Valid for: E; Default: none; Notes: svg, map only graphviz Valid for: E; Default: ""; Notes: svg, cmap only graphviz Valid for: G; Default: ; Parsing Default:  graphviz Valid for: ENC; Default: [] graphviz Valid for: G; Default:   ","; Notes: requires Graphviz >= 2.30.0 graphviz Valid for: G; Default:   [] graphviz Valid for: G; Default: [] graphviz Valid for: G; Default:   " :t" graphviz Valid for: G graphviz Valid for: E; Default: 1.0 (), 0.3 (); Notes: ,  only graphviz Valid for: G; Default: ; Minimum: 0; Notes:  only graphviz Valid for: G; Default: 0.0; Notes:  only graphviz Valid for: E; Default: ""; Notes:  only graphviz Valid for: GC; Notes): write only, requires Graphviz >= 2.28.0 graphviz Valid for: EGC; Notes : write only graphviz Valid for: E; Default: ""; Notes:  only graphviz Valid for: GC; Notes): write only, requires Graphviz >= 2.28.0 graphviz Valid for: NGC; Default: device dependent graphviz Valid for: G; Default:  100 * # nodes (mode ==  ), 200 (mode ==  ), 600 (); Notes: ,  only graphviz Valid for: G; Default: 1.0; Notes:  only graphviz Valid for: G; Default: 1.0; Minimum: 0.0; Notes:  only graphviz Valid for: E; Default: 1; Minimum: 0; Notes:  only graphviz Valid for: G; Default:   (actually   for 5, but this isn't used as a default in this library); Notes: ,  only graphviz Valid for: G; Default:  ; Notes:  only graphviz Valid for: G; Default: ; Parsing Default: ; Notes: " only; requires the Mosek software graphviz Valid for: G; Default: 0.25; Minimum: 0.02 graphviz Valid for: GCNE; Default: ; Parsing Default:  graphviz Valid for: G; Default:  ; Parsing Default:  ; Notes: not  graphviz Valid for: G; Default: ; Parsing Default: ; Notes: " only, requires Graphviz >= 2.38.0 graphviz Valid for: G; Notes:  only graphviz Valid for: G; Notes:  only graphviz Valid for: GN; Default: none; Notes:  only graphviz Valid for: N; Default: 0.0; Minimum: 360.0 graphviz Valid for: G; Default:  graphviz Valid for: G; Default:  ; Parsing Default:  ; Notes: not  graphviz Valid for: G; Default: -4; Minimum: -1.0e10; Notes:   only graphviz Valid for: G; Default: ; Parsing Default: ; Notes:  " only, requires Graphviz >= 2.36.0 graphviz Valid for: G; Default:  ; Parsing Default:  graphviz Valid for: G; Default:  graphviz Valid for: G; Default:   0.0555 (4 points) graphviz Valid for: G graphviz Valid for: G; Default:  graphviz Valid for: C; Default:   graphviz Valid for: CNE; Default: 1.0; Minimum: 0.0 graphviz Valid for: NC; Default: shape default (nodes), 1 (clusters); Minimum: 0 graphviz Valid for: N; Default: ; Parsing Default: ; Notes: ,  only graphviz Valid for: EN graphviz Valid for: G; Default:  ; Parsing Default:  ; Notes:  only graphviz Valid for: G; Default: 0.0; Minimum: 0.0 graphviz Valid for: S; Notes:  only graphviz Valid for: G; Default:  ; Notes:  only graphviz Valid for: G; Default: [0.5] (), [1.0] (Twopi); Minimum: [0.02]; Notes: Twopi,  only graphviz Valid for: G graphviz Valid for: N; Notes : write only graphviz Valid for: N; Default: ; Parsing Default:  graphviz Valid for: G; Default: ; Parsing Default: ; Notes:  only graphviz Valid for: G; Default: 1.0; Minimum: 0.0; Notes:  only graphviz Valid for: GN; Default:   "" (graphs),   (nodes); Parsing Default:  ; Notes: , Twopi only graphviz Valid for: G; Default: 0 graphviz Valid for: G; Default: 0; Notes: " only, requires Graphviz >= 2.28.0 graphviz Valid for: E; Default: ""; Notes:  only graphviz Valid for: E; Default: ""; Notes:  only graphviz Valid for: N; Default: 8 (output), 20 (overlap and image maps) graphviz Valid for: G; Notes: Not =, requires Graphviz >= 2.28.0 (>= 2.38.0 for anything except ) graphviz Valid for: G; Default: 30; Notes:  only graphviz Valid for: G; Default:   4; Notes: not  graphviz Valid for: N; Default:  graphviz Valid for: ENG; Default: 0; Minimum: 0; Notes: < only; used for debugging by printing PostScript guide boxes graphviz Valid for: N; Default: 4; Minimum: 0 graphviz Valid for: G graphviz Valid for: N; Default: 0.0; Minimum: -100.0 graphviz Valid for: G; Default:  ; Notes:  only graphviz Valid for: GCN; Default: 0; Minimum: 0 graphviz Valid for: G; Default:   (),   (other); Parsing Default:  graphviz Valid for: G; Default:     seed for some unknown fixed seed.; Notes: ,  only graphviz Valid for: ENCG graphviz Valid for: G; Default: ""; Notes : svg only graphviz Valid for: E; Default: ""; Notes: svg, map only graphviz Valid for: E; Notes): write only, requires Graphviz >= 2.30.0 graphviz Valid for: E; Default: ; Parsing Default:  graphviz Valid for: E; Default:   "" graphviz Valid for: E; Default:   graphviz Valid for: E; Default: none; Notes: svg, map only graphviz Valid for: E; Default: ""; Notes: svg, cmap only graphviz Valid for: ENGC; Default: none; Notes: svg, map only graphviz Valid for: NEC; Default: ""; Notes: svg, cmap only graphviz Valid for: G; Parsing Default: ; Notes: bitmap output only graphviz Valid for: N; Notes : write only graphviz Valid for: G; Default: none graphviz Valid for: G; Default: 0.05; Minimum: 0.0; Notes: not  graphviz Valid for: E; Default:   1; Minimum:   0 (),   1 (,,); Notes2: as of Graphviz 2.30: weights for dot need to be  s graphviz Valid for: N; Default: 0.75; Minimum: 0.01 graphviz Valid for: G; Notes: xdot only, requires Graphviz >= 2.34.0, equivalent to specifying version of xdot to be used graphviz Valid for: EN; Default:   ""; Notes: requires Graphviz >= 2.29.0 graphviz Valid for: EN; Notes): write only, requires Graphviz >= 2.29.0 graphviz Valid for(: Assumed valid for all; the fields are   name and value respectively. graphvizDetermine if this   is valid for use with Graphs. graphvizDetermine if this   is valid for use with Clusters. graphvizDetermine if this  ! is valid for use with SubGraphs. graphvizDetermine if this   is valid for use with Nodes. graphvizDetermine if this   is valid for use with Edges. graphvizDetermine if two   are the same type of  . graphviz(Return the default value for a specific   if possible; graph&cluster values are preferred over node edge values. graphvizDetermine if the provided  value is a valid name for an  . graphviz1Remove attributes that we don't want to consider:Those that are defaults+colorscheme (as the colors embed it anyway)graphvizFor -like data structures where the presence of the field name without a value implies a default value.graphvizAttempt to parse the "=value" part of a  key=value- pair. If there is an equal sign but the value6 part doesn't parse, throw an un-recoverable error. graphvizCreate a custom attribute. graphviz5Determines whether or not this is a custom attribute. graphviz2The value of a custom attribute. Will throw a  if the provided   isn't a custom one. graphviz1The name of a custom attribute. Will throw a  if the provided   isn't a custom one. graphvizReturns all custom attributes and the list of non-custom Attributes. graphvizFind the (first instance of the) specified custom attribute and returns it along with all other Attributes. graphvizDelete all custom attributes (actually, this will delete all   values; as such it can also be used to remove legacy attributes). graphviz8Removes all instances of the specified custom attribute.    *Consider Attributes equal on constructors.(c) Ivan Lazar Miljenovic3-Clause BSD-styleIvan.Miljenovic@gmail.com Safe-Inferred graphvizDefined as a wrapper around   where equality is based solely upon the constructor, not the contents. 2User-friendly wrappers around Graphviz attributes.*(c) Matthew Sackman, Ivan Lazar Miljenovic3-Clause BSD-styleIvan.Miljenovic@gmail.com Safe-Inferred' graphviz/A particular way of drawing the end of an edge. graphviz#A particular style type to be used. graphvizA convenience class to make it easier to create labels. It is highly recommended that you make any other types that you wish to create labels from an instance of this class, preferably via the String or Text instances. graphvizThis function only creates a  & value to enable you to use it for   such as  , etc. graphvizEquivalent to   .  ; the most common label  . graphviz An alias for   for use with the OverloadedStrings extension. graphvizCreate a label outside of a node/edge. Currently only in the Graphviz development branch (2.29.*). graphviz An alias for   for use with the OverloadedStrings extension. graphvizForce the positioning of  $s, even when it will cause overlaps. graphviz An alias for   for use with the OverloadedStrings extension. graphvizSpecify the background color of a graph or cluster. For clusters, if     is used, then   will override it. graphvizAs with  , but add a second color to create a gradient effect. Requires Graphviz >= 2.29.0. graphvizSpecify the fill color of a node, cluster or arrowhead. Requires     for nodes and clusters. For nodes and edges, if this isn't set then the  ) value is used instead; for clusters,   is used. graphvizAs with  , but add a second color to create a gradient effect. Requires Graphviz >= 2.29.0. graphvizSpecify the color of text. graphviz3Specify the color of the bounding box of a cluster. graphvizThe color attribute serves several purposes. As such care must be taken when using it, and it is preferable to use those alternatives that are available when they exist.The color of edges;The bounding color of nodes;3The bounding color of clusters (i.e. equivalent to  );If the     is set, then it defines the background color of nodes and clusters unless   or   respectively is set. graphvizAlso available for edges. graphvizAlso available for edges. graphvizAlso available for edges. graphvizAlso available for edges. graphvizAlso available for edges. graphvizAlso available for clusters. graphvizAlso available for clusters. graphvizOnly available for nodes. graphvizOnly available for rectangularly-shaped nodes and clusters. Requires Graphviz >= 2.30.0. graphvizOnly available for elliptically-shaped nodes. Requires Graphviz >= 2.30.0. graphvizOnly available for edges; creates a tapered edge between the two nodes. Requires Graphviz >= 2.29.0.graphviz8Available for nodes, clusters and edges. When using , indicates that a radial gradient should be used. Requires Graphviz >= 2.29.0.graphvizSpecify the width of lines. Valid for clusters, nodes and edges.graphvizSpecify the angle at which gradient fills are drawn; for use with   and  . Requires Graphviz >= 2.29.0.graphvizThe shape of a node.graphvizHow to draw the arrow at the node the edge is pointing to. For an undirected graph, requires either    or   .graphvizHow to draw the arrow at the node the edge is coming from. Requires either    or   .graphviz)Specify where to place arrows on an edge.graphvizSpecify an ordering of edges of a node: either the outgoing or the incoming edges of a node must appear left-to-right in the same order in which they are defined in the input.When specified as both a global graph or sub-graph level attribute, then it takes precedence over an attribute specified for an individual node.graphviz When using dot, this allows you to control relative placement of sub-graphs and clusters.graphvizA shorter variant than using  .graphvizA shorter variant than using PortName from  .         9Common internal functions for dealing with overall types.(c) Ivan Lazar Miljenovic3-Clause BSD-styleIvan.Miljenovic@gmail.com Safe-Inferred"%graphviz An edge in DotGraph.graphviz A node in DotGraph.graphviz'Represents a list of top-level list of  0s for the entire graph/sub-graph. Note that  also applies to  DotSubGraphs.Note that Dot allows a single   to be listed on a line; if this is the case then when parsing, the type of  & it is determined and that type of GlobalAttribute is created.graphvizA polymorphic type that covers all possible ID values allowed by Dot syntax. Note that whilst the  and  instances for  will properly take care of the special cases for numbers, they are treated differently here.graphvizTakes into account edge statements containing something like  a -> {b c}.graphvizThis must" only be used for sub-graphs, etc.graphvizPrint the actual ID for a  DotSubGraph.graphvizParse the separator (and any other whitespace1 present) between statements.!  +The canonical representation of Dot graphs.*(c) Matthew Sackman, Ivan Lazar Miljenovic3-Clause BSD-styleIvan.Miljenovic@gmail.com Safe-Inferred'ngraphvizA Dot graph in canonical form.graphvizIf , no multiple edges are drawn.graphviz,Assumed to be an injective mapping function."" 0Definition of the clustering types for Graphviz.*(c) Matthew Sackman, Ivan Lazar Miljenovic3-Clause BSD-styleIvan.Miljenovic@gmail.com Safe-Inferred,Q graphviz#A tree representation of a cluster.graphvizDefine into which cluster a particular node belongs. Clusters can be nested to arbitrary depth.graphviz'Indicates the actual Node in the Graph.graphvizIndicates that the  is in the Cluster c.graphviz6Extract the clusters and nodes from the list of nodes.graphviz;Convert a single node cluster into its tree representation.graphvizTwo nodes are in the same "default" cluster; otherwise check if they are in the same cluster.graphvizSingleton nodes come first, and then ordering based upon the cluster.graphvizExtract the sub-trees.graphvizCombine clusters.graphviz5Convert the cluster representation of the trees into  s and s (with  =  , and  = ).graphviz Convert this  into its Dot representation.!Create lookups for  Attributes.(c) Ivan Lazar Miljenovic3-Clause BSD-styleIvan.Miljenovic@gmail.com Safe-Inferred.graphviz"The available information on each  (both explicit and implicit).graphviz0The available information for each cluster; the [] denotes all locations where that particular cluster is located (more than one location can indicate possible problems).graphviz?The path of clusters that must be traversed to reach this spot.graphvizIf one  is a prefix of another, then take the longer one; otherwise, take the first .%Haskell representation of Dot graphs.(c) Ivan Lazar Miljenovic3-Clause BSD-styleIvan.Miljenovic@gmail.com Safe-Inferred?graphvizA convenience class to make it easier to convert data types to & values, e.g. for cluster identifiers.+In most cases, conversion would be via the  or  instances (e.g. using ).graphvizThis class exists just to make type signatures nicer; all instances of " should also be an instance of .graphvizThis class exists just to make type signatures nicer; all instances of " should also be an instance of .graphvizThis class exists just to make type signatures nicer; all instances of " should also be an instance of .graphvizThis class is used to provide a common interface to different ways of representing a graph in Dot form.You will most probably not4 need to create your own instances of this class.The type variable represents the current node type of the Dot graph, and the  restriction is there because in practice most implementations of some of these methods require it.graphvizConvert from a graph in canonical form. This is especially useful when using the functions from Data.GraphViz.Algorithms.See FromGeneralisedDot in Data.GraphViz.Types.Generalised( for a semi-inverse of this function.graphvizReturn the ID of the graph.graphvizSet the ID of the graph.graphvizIs this graph directed?graphviz'Set whether a graph is directed or not.graphviz=Is this graph strict? Strict graphs disallow multiple edges.graphviz(A strict graph disallows multiple edges.graphviz;Change the node values. This function is assumed to be  injective, otherwise the resulting graph will not be identical to the original (modulo labels).graphvizReturn information on all the clusters contained within this , as well as the top-level  for the overall graph.graphvizReturn information on the s contained within this . The & parameter indicates if applicable  should be included.graphvizReturn information on the s contained within this . The & parameter indicates if applicable  should be included.graphvizGive any anonymous sub-graphs or clusters a unique identifier (i.e. there will be no  key in the  from ).graphviz A variant of  with default attributes removed and only attributes usable by graph/cluster kept (where applicable).graphviz A variant of  with default attributes removed and only attributes used by nodes kept.graphviz A variant of  with default attributes removed and only attributes used by edges kept.graphvizReturns all resultant  s in the  (not including NodeAttrs).graphvizReturns all resultant  s in the  (not including EdgeAttrs).graphviz The actual Dot code for an instance of $. Note that it is expected that  .  ==  (this might not be true the other way around due to un-parseable components).graphvizParse a limited subset of the Dot language to form an instance of . Each instance may have its own limitations on what may or may not be parseable Dot code./Also removes any comments, etc. before parsing.graphvizAs with  , but if an  Attribute cannot be parsed strictly according to the known rules, let it fall back to being parsed as an UnknownAttribute. This is especially useful for when using a version of Graphviz that is either newer (especially for the XDot attributes) or older (when some attributes have changed) but you'd still prefer it to parse rather than throwing an error.graphviz An alias for  for use with the OverloadedStrings extension.graphviz+This instance loses precision by going via  .< < "IO-related functions for graphviz.(c) Ivan Lazar Miljenovic3-Clause BSD-styleIvan.Miljenovic@gmail.com Safe-InferredG graphvizCorrectly render Graphviz output in a more machine-oriented form (i.e. more compact than the output of  renderDot).graphvizExplicitly convert a (lazy)  to a + value using UTF-8 encoding, throwing a ! if there is a decoding error.graphviz Output the DotRepr to the specified .graphviz Output the DotRepr to the spcified - in a more compact, machine-oriented form.graphvizStrictly read in a % value using an appropriate encoding.graphvizRead in and parse a DotRepr value from the specified .graphvizWrite the specified DotRepr to file.graphvizRead in and parse a DotRepr value from a file.graphvizPrint the specified DotRepr to .graphvizRead in and parse a DotRepr value from .graphviz)Run an external command on the specified DotRepr. Remember to use hSetBinaryMode on the ) for the output function if necessary.(If the command was unsuccessful, then a  is thrown.For performance reasons, a temporary file is used to store the generated Dot code. As such, this is only suitable for local commands.graphviz A version of - that fully evaluates the contents of the ' (that is, until EOF is reached). The  is not closed.graphvizStore the result of the  consumption into the .graphvizCommand to rungraphvizCommand-line argumentsgraphviz'Obtaining the output; should be strict.  #Functions to run Graphviz commands.*(c) Matthew Sackman, Ivan Lazar Miljenovic3-Clause BSD-styleIvan.Miljenovic@gmail.com Safe-Inferred"W,graphvizUnlike , these items do not produce an output file; instead, they directly draw a canvas (i.e. a window) with the resulting image.graphvizThe possible Graphviz output formats (that is, those that actually produce a file).graphvizWindows Bitmap Format.graphviz6Pretty-printed Dot output with no layout performed.graphviz6Reproduces the input along with layout information.graphvizAs with , but provides even more information on how the graph is drawn. The optional " is the same as specifying the  XDotVersion attribute.graphvizEncapsulated PostScript.graphvizFIG graphics language.graphvizInternal GD library format.graphvizCompressed version of .graphvizGraphics Interchange Format.graphvizIcon image file format.graphvizServer-side imagemap.graphvizClient-side imagemap.graphvizAs for 8, except only rectangles are used as active areas.graphvizAs for 8, except only rectangles are used as active areas.graphvizThe JPEG image format.graphvizPortable Document Format.graphvizSimple text format.graphvizAs for , but provides port names on head and tail nodes when applicable.graphviz!Portable Network Graphics format.graphviz PostScript.graphvizPostScript for PDF.graphviz Scalable Vector Graphics format.graphvizCompressed SVG format.graphvizTagged Image File Format.graphvizVector Markup Language;  is usually preferred.graphvizCompressed VML format;  is usually preferred.graphvizVirtual Reality Modeling Language format; requires nodes to have a third dimension set via the Pos attribute (and with a Dim value of at least 3).graphvizWireless BitMap format; monochrome format usually used for mobile computing devices.graphviz5Google's WebP format; requires Graphviz >= 2.29.0.graphvizThis class is for those data types that are valid options for the Graphviz tools to use with the -T argument.graphviz(The default command for directed graphs.graphviz*The default command for undirected graphs.graphviz?The appropriate (default) Graphviz command for the given graph.graphviz"A default file extension for each .graphvizRun the recommended Graphviz command on this graph, saving the result to the file provided (note: file extensions are not checked).graphvizRun the chosen Graphviz command on this graph, saving the result to the file provided (note: file extensions are not checked).graphviz.Append the default extension for the provided  to the provided  for the output file.graphvizRun the chosen Graphviz command on this graph, but send the result to the given handle rather than to a file.Note that the  ->  a function must% fully consume the input from the ; e.g. use strict  ByteStrings rather than lazy ones.(If the command was unsuccessful, then a  is thrown.graphvizRun the chosen Graphviz command on this graph and render it using the given canvas type.graphvizRun the recommended Graphviz command on this graph and render it using the given canvas type.graphvizIs the Graphviz suite of tools installed? This is determined by whether dot is available in the PATH.graphvizIf Graphviz does not seem to be available, print the provided error message and then exit fatally.graphvizWhich command to rungraphvizThe  to usegraphvizThe  typegraphvizExtract the outputgraphvizThe error or the result.55&Various algorithms on Graphviz graphs.*(c) Matthew Sackman, Ivan Lazar Miljenovic3-Clause BSD-styleIvan.Miljenovic@gmail.com Safe-Inferred[graphvizPlace edges in the clusters where their nodes are rather than in the top-level graph.graphviz Put common   as top-level .graphvizOptions that are more like how  dot -Tcanon works.graphviz)Canonicalise with some sensible defaults.graphvizAs with , but allow custom .graphvizFrom sub-graphsgraphviz+Statements from the sub-graphs for testing.graphvizFrom nodes/edges  +Alternate definition of the Graphviz types.(c) Ivan Lazar Miljenovic3-Clause BSD-styleIvan.Miljenovic@gmail.com Safe-Inferred]graphvizThis class is useful for being able to parse in a dot graph as a generalised one, and then convert it to your preferred representation.&This can be seen as a semi-inverse of .graphviz?The internal representation of a generalised graph in Dot form.graphvizIf , no multiple edges are drawn.graphviz Convert a  to a *, keeping the same order of statements.graphviz,Assumed to be an injective mapping function.$$*A monadic interface for making Dot graphs.(c) Ivan Lazar Miljenovic3-Clause BSD-styleIvan.Miljenovic@gmail.com Safe-InferredcTgraphvizThe actual monad; as with  but allows you to return a value within the do-block. The actual implementation is based upon the Writer monad.graphviz*The monadic representation of a Dot graph.graphviz8Create a directed dot graph with the specified graph ID.graphviz-Create a directed dot graph with no graph ID.graphviz:Create a undirected dot graph with the specified graph ID.graphviz/Create a undirected dot graph with no graph ID.graphviz'Add graph/sub-graph/cluster attributes.graphvizAdd global node attributes.graphvizAdd global edge attributesgraphviz"Add a named subgraph to the graph.graphviz'Add an anonymous subgraph to the graph.!It is highly recommended you use  instead.graphviz!Add a named cluster to the graph.graphvizAdd a node to the graph.graphviz+Add a node with no attributes to the graph.graphvizAdd an edge to the graph.graphvizAdd an edge with no attributes.graphviz An alias for $ to make edges look more undirected.9 9 *A graph-like representation of Dot graphs.(c) Ivan Lazar Miljenovic3-Clause BSD-styleIvan.Miljenovic@gmail.com Safe-Inferredy&graphvizThe decomposition of a node from a dot graph. Any loops should be found in  rather than :. Note also that these are created/consumed as if for directed graphs.graphviz*The cluster this node can be found in; Nothing6 indicates the node can be found in the root graph.graphviz/A Dot graph that allows graph operations on it.graphviz Merge the  into the graph. Assumes that the specified node is not in the graph but that all endpoints in the  and  (with the exception of loops) are. If the cluster is not present in the graph, then it will be added with no attributes with a parent of the root graph. Note that & and  are not quite inverses, as this function will add in the cluster if it does not yet exist in the graph, but  will not delete it.graphviz'Recursively merge the list of contexts. "composeList = foldr (&) emptyGraphgraphvizAdd a node to the current graph. Merges attributes and edges if the node already exists in the graph.If the specified cluster does not yet exist in the graph, then it will be added (as a sub-graph of the overall graph and no attributes).graphviz A variant of / that takes in a DotNode (not in a cluster).graphvizAdd the specified edge to the graph; assumes both node values are already present in the graph. If the graph is undirected then the order of nodes doesn't matter.graphviz A variant of  that takes a  value.graphvizAdd a new cluster to the graph; throws an error if the cluster already exists. Assumes that it doesn't match the identifier of the overall graph. If the parent cluster doesn't already exist in the graph then it will be added.graphvizSpecify the parent of the cluster; adds both in if not already present.graphvizSpecify the attributes of the cluster; adds it if not already present.graphviz Create a graph with no clusters.graphvizConvert this DotGraph into canonical form. All edges are found in the outer graph rather than in clusters.graphvizA partial inverse of , in that if a node exists in a graph then it will be decomposed, but will not remove the cluster that it was in even if it was the only node in that cluster.graphvizAs with , but do not specify which node to decompose.graphvizRecursively decompose the Dot graph into a list of contexts such that if (c:cs) = decomposeList dg, then  dg = c &  cs.5Note that all global attributes are lost, so this is not5 suitable for representing a Dot graph on its own.graphvizDelete the specified node from the graph; returns the original graph if that node isn't present.graphvizDelete all edges between the two nodes; returns the original graph if there are no edges.graphvizDeletes the specified edge from the DotGraph (note: for unordered graphs both orientations are considered).graphvizAs with  but takes a " rather than individual values.graphvizDelete the specified cluster, and makes any clusters or nodes within it be in its root cluster (or the overall graph if required).graphviz>Remove clusters with no sub-clusters and no nodes within them.graphvizDoes this graph have any nodes?graphviz"Does this graph have any clusters?graphviz.Determine if this graph has nodes or clusters.graphviz-Return the ID for the cluster the node is in.graphviz#Return the attributes for the node.graphvizPredecessor edges for the specified node. For undirected graphs equivalent to .graphvizSuccessor edges for the specified node. For undirected graphs equivalent to .graphvizAll edges involving this node.graphviz5Which cluster (or the root graph) is this cluster in?graphviz+Convert any existing DotRepr instance to a .graphvizConvert a canonical Dot graph to a graph-based one. This assumes that the canonical graph is the same format as returned by . The "unsafeness" is that:,All clusters must have a unique identifier (, can be used to make sure all clusters have7 an identifier, but it doesn't ensure uniqueness).=All nodes are assumed to be explicitly listed precisely once.2Only edges found in the root graph are considered.If this isn't the case, use  instead.The  graphToDot function from  Data.GraphViz produces output suitable for this function (assuming all clusters are provided with a unique identifier); graphElemsToDot is suitable if all nodes are specified in the input list (rather than just the edges).graphviz+Uses the ParseDot instance for generalised s.graphviz)Uses the PrintDot instance for canonical s.graphviz If the graph is the output from *, then it should be safe to substitute  for .graphviz It should be safe to substitute  for  in the output of this.graphviz)The cluster the node can be found in (Nothing refers to the root graph).graphviz The identifier for this cluster.graphvizThe parent of this cluster (Nothing refers to the root graph)775 Graphviz bindings for Haskell.*(c) Matthew Sackman, Ivan Lazar Miljenovic3-Clause BSD-styleIvan.Miljenovic@gmail.com Safe-Inferred"graphviz7Used to augment an edge label with a unique identifier.graphviz-Augment the current edge label type with the   applied to that edge.graphviz-Augment the current node label type with the   applied to that node.graphviz An alias for  when dealing with FGL graphs.graphviz)Defines the parameters used to convert a  into a .A value of type  n nl el cl l indicates that the  has a node type of n, node labels of type nl, edge labels of type el!, corresponding clusters of type cl8 and after clustering the nodes have a label of type l) (which may or may not be the same as nl).The tuples in the function types represent labelled nodes (for (n,nl) and (n,l)) and labelled edges ((n,n,el); the value  (f,t,ftl) is an edge from f to l with a label of ftl). These correspond to  and  in FGL graphs.The clustering in  can be to arbitrary depth.Note that the term "cluster" is slightly conflated here: in terms of GraphvizParams2 values, a cluster is a grouping of nodes; the  function lets you specify whether it is a cluster in the Dot sense or just a sub-graph.graphvizTrue if the graph is directed; False otherwise.graphvizThe top-level global   for the entire graph.graphviz?A function to specify which cluster a particular node is in.graphviz=Is this "cluster" actually a cluster, or just a sub-graph?graphviz"The name/identifier for a cluster.graphvizSpecify which global attributes are applied in the given cluster.graphviz The specific  Attributes for a node.graphviz The specific  Attributes for an edge.graphviz+Determine if the given graph is undirected.graphvizEspecially useful for quick explorations in ghci, this is a "do what I mean" set of parameters that prints the specified labels of a non-clustered graph.graphviz A default  value which assumes the graph is directed, contains no clusters and has no  s set.If you wish to have the labels of the nodes to have a different type after applying  from before clustering, then you will have to specify your own  value from scratch (or use ).If you use a custom  function (which if you actually want clusters you should) then you should also override the (nonsensical) default .graphviz A variant of . that enforces that the clustering type is (); (i.e.: no clustering); this avoids problems when using  internally within a function without any constraint on what the clustering type is.graphvizA & value where every field is set to . This is useful when you have a function that will set some of the values for you (e.g. ) but you don't want to bother thinking of default values to set in the meantime. This is especially useful when you are programmatically setting the clustering function (and as such do not know what the types might be).graphvizDetermine if the provided , is directed or not and set the value of  appropriately.graphvizConvert a graph to Dot format, using the specified parameters to cluster the graph, etc.graphvizAs with , but this allows you to easily convert other graph-like formats to a Dot graph as long as you can get a list of nodes and edges from it.graphvizA pseudo-inverse to ; "pseudo" in the sense that the original node and edge labels aren't able to be reconstructed.graphvizRun the appropriate Graphviz command on the graph to get positional information and then combine that information back into the original graph.graphvizThis is a "quick-and-dirty" graph augmentation function that sets no   and thus should be referentially transparent and is wrapped in .Note that the provided  is only used for ,  and .graphvizAdd unique edge identifiers to each label. This is useful for when multiple edges between two nodes need to be distinguished.graphvizAdd a custom attribute to the list of attributes containing the value of the unique edge identifier.graphviz&Remove the unique identifier from the .graphviz Pass the 6 through the relevant command and then augment the  that it came from.graphvizUse the   in the provided 8 to augment the node and edge labels in the provided . The unique identifiers on the edges are also stripped off.Please note that the behaviour for this function is undefined if the ! does not come from the original  (either by using a conversion function or by passing the result of a conversion function through a  via the  or similar).graphviz$Quickly visualise a graph using the  ?. If your label types are not (and cannot) be instances of  , you may wish to use ,  or # to set them to a value such as "". 1"#$"#%"#&"#'"()"(*"(*"(+"(,"(-"(."(/"(0"(1"23"24"25"67"89":;":<":<"=>"?@"#A"#B"#C"#D"#E"#F"#G"#H"#I"#JKLMKLNKLOKLPKLQKLRKLSKLTKLUKLVKLWKLXKYZKY[KY\KY]K^_K^`K^5K^aK^bK^cK^dK^eK^fK^gK^hK^iK^jK^kK^lK^mK^nK^oK^pqrsqrtqruqrvqrwqrxqryqrzqr{qr|qr}qr~qrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqrqqqq                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         ! ! !                                                                                                                       "#"""""""                  !!!!!!!!!!!!!!!!""#"""""""6 "" +graphviz-2999.20.2.0-CN3hFuSu7cnFK33ANlBX72Data.GraphViz.ParsingData.GraphViz.ExceptionData.GraphViz.Printing&Data.GraphViz.Attributes.Colors.BrewerData.GraphViz.Attributes.ColorsData.GraphViz.PreProcessing!Data.GraphViz.Attributes.Complete#Data.GraphViz.Attributes.Colors.X11#Data.GraphViz.Attributes.Colors.SVGData.GraphViz.Attributes.HTMLData.GraphViz.AttributesData.GraphViz.Types.Canonical Data.GraphVizData.GraphViz.TypesData.GraphViz.Commands.IOData.GraphViz.CommandsData.GraphViz.AlgorithmsData.GraphViz.Types.GeneralisedData.GraphViz.Types.MonadicData.GraphViz.Types.Graph$Data.GraphViz.Attributes.ColorSchemeData.GraphViz.Internal.StateLayerSep LayerListSepData.GraphViz.Internal.Util Data.GraphViz.Commands.Available!Data.GraphViz.Attributes.InternalData.GraphViz.Attributes.ValuesData.GraphViz.Attributes.ArrowsData.GraphViz.Attributes.Same#Data.GraphViz.Types.Internal.Common#Data.GraphViz.Algorithms.ClusteringData.GraphViz.Types.StatebaseGHC.Base<*>pure*> ApplicativeControl.Applicative getZipListZipList unwrapMonad WrapMonad WrappedMonad unwrapArrow WrapArrow WrappedArrowoptionalControl.Exception.Base mapExceptionhandlebracketGHC.IOthrowIO GHC.ExceptionthrowData.Functor.ConstgetConstConst Data.Foldableasum Data.Functor<$><$liftA2<*somemany<|> AlternativeliftA3liftA<**>$polyparse-1.13-GKpg5tjbtUKuQvA8hlu3S%Text.ParserCombinators.Poly.StateTextreparsestGetstQuerystUpdate many1Satisfy manySatisfyonFailsatisfyeofnextPParser"Text.ParserCombinators.Poly.Result CommittedFailureSuccessResult Text.ParserCombinators.Poly.Base manyFinally' manyFinally bracketSepsepBy1sepBymany1uptoexactlyoneOf adjustErrBadfailBaddiscardapplyoneOf' adjustErrcommit Commitment PolyParse-wl-pprint-text-1.2.0.2-HtRbmEczjMwCebAlulDFRa$Text.PrettyPrint.Leijen.Text.Monadicgroupnestingcolumnnest linebreakline textStricttextcharemptyalignhangindent fillBreakfillprettyMrationaldoublefloatintegerint stringStrictequals backslashdotspacecommacolonsemidquotesquoterbracketlbracketrbracelbraceranglelanglerparenlparenenclosebracketsanglesparensbracesdquotessquotes spacebreak softbreaksoftline<$$><++><+>besidevcathcatfillCatcatvsephsepfillSepsep punctuate encloseSep semiBracestupledlistText.PrettyPrint.Leijen.TextdisplayTStrictdisplayB renderOneLineDoc BrewerNameAccentBluesBrbgBugnBupuDark2GnbuGreensGreysOrangesOrrdPairedPastel1Pastel2PiygPrgnPubuPubugnPuorPurdPurplesRdbuRdgyRdpuRdylbuRdylgnRedsSet1Set2Set3SpectralYlgnYlgnbuYlorbrYlorrd BrewerSchemeBScheme ColorSchemeX11SVGBrewerGraphvizException NotDotCode NotUTF8Dot GVProgramExc NotCustomAttr$fExceptionGraphvizException$fShowGraphvizException$fEqGraphvizException$fOrdGraphvizException isNumString isIntStringParseDot parseUnqtparse parseUnqtList parseListParse runParserparseLiberally runParserWith runParser'parseItcheckValidParsecheckValidParseWithRestparseIt'onlyBoolquotelessString numString stringBlock quotedStringparseStrictFloatparseSignedFloat parseAndSpacestring stringRep stringReps stringParse stringValuestrings characternoneOf whitespace1 whitespacewrapWhitespaceoptionalQuotedStringoptionalQuoted quotedParseorQuote quoteChar parseEscapednewlinenewline' consumeLineparseEq ignoreSepcommaSep commaSepUnqt commaSep' parseComma tryParseList tryParseList' parseAngled parseBracedparseColorScheme$fParseDotBrewerName$fParseDotBrewerScheme$fParseDotColorScheme $fParseDot[]$fParseDotText$fParseDotText0$fParseDotVersion$fParseDotChar$fParseDotBool$fParseDotDouble$fParseDotWord16$fParseDotWord8$fParseDotInteger $fParseDotInt preProcessPrintDotunqtDottoDot unqtListToDot listToDotDotCodeDotCodeM runDotCode renderDotprintItunqtTextdotText addQuoteswrapcommaDel printField unqtEscaped printEscapedangledfslashprintColorScheme$fGraphvizStateMDotCodeM$fMonoidDotCodeM$fSemigroupDotCodeM$fIsStringDotCodeM$fShowDotCodeM$fPrintDotBrewerName$fPrintDotBrewerScheme$fPrintDotColorScheme $fPrintDot[]$fPrintDotText$fPrintDotText0$fPrintDotVersion$fPrintDotChar$fPrintDotBool$fPrintDotDouble$fPrintDotWord64$fPrintDotWord32$fPrintDotWord16$fPrintDotWord8$fPrintDotInteger $fPrintDotInt$fFunctorDotCodeM$fApplicativeDotCodeM$fMonadDotCodeM!$fMonadStateGraphvizStateDotCodeMGraphvizCommandDotNeatoTwoPiCircoFdpSfdpOsage Patchwork CompassPointNorth NorthEastEast SouthEastSouth SouthWestWest NorthWest CenterPointNoCPPortPos LabelledPortPortNamePNportNameX11Color AliceBlue AntiqueWhite AntiqueWhite1 AntiqueWhite2 AntiqueWhite3 AntiqueWhite4 Aquamarine Aquamarine1 Aquamarine2 Aquamarine3 Aquamarine4AzureAzure1Azure2Azure3Azure4BeigeBisqueBisque1Bisque2Bisque3Bisque4BlackBlanchedAlmondBlueBlue1Blue2Blue3Blue4 BlueVioletBrownBrown1Brown2Brown3Brown4 Burlywood Burlywood1 Burlywood2 Burlywood3 Burlywood4 CadetBlue CadetBlue1 CadetBlue2 CadetBlue3 CadetBlue4 Chartreuse Chartreuse1 Chartreuse2 Chartreuse3 Chartreuse4 Chocolate Chocolate1 Chocolate2 Chocolate3 Chocolate4CoralCoral1Coral2Coral3Coral4CornFlowerBlueCornSilk CornSilk1 CornSilk2 CornSilk3 CornSilk4CrimsonCyanCyan1Cyan2Cyan3Cyan4 DarkGoldenrodDarkGoldenrod1DarkGoldenrod2DarkGoldenrod3DarkGoldenrod4 DarkGreen DarkkhakiDarkOliveGreenDarkOliveGreen1DarkOliveGreen2DarkOliveGreen3DarkOliveGreen4 DarkOrange DarkOrange1 DarkOrange2 DarkOrange3 DarkOrange4 DarkOrchid DarkOrchid1 DarkOrchid2 DarkOrchid3 DarkOrchid4 DarkSalmon DarkSeaGreen DarkSeaGreen1 DarkSeaGreen2 DarkSeaGreen3 DarkSeaGreen4 DarkSlateBlue DarkSlateGrayDarkSlateGray1DarkSlateGray2DarkSlateGray3DarkSlateGray4 DarkTurquoise DarkVioletDeepPink DeepPink1 DeepPink2 DeepPink3 DeepPink4 DeepSkyBlue DeepSkyBlue1 DeepSkyBlue2 DeepSkyBlue3 DeepSkyBlue4DimGray DodgerBlue DodgerBlue1 DodgerBlue2 DodgerBlue3 DodgerBlue4 Firebrick Firebrick1 Firebrick2 Firebrick3 Firebrick4 FloralWhite ForestGreen Gainsboro GhostWhiteGoldGold1Gold2Gold3Gold4 Goldenrod Goldenrod1 Goldenrod2 Goldenrod3 Goldenrod4GrayGray0Gray1Gray2Gray3Gray4Gray5Gray6Gray7Gray8Gray9Gray10Gray11Gray12Gray13Gray14Gray15Gray16Gray17Gray18Gray19Gray20Gray21Gray22Gray23Gray24Gray25Gray26Gray27Gray28Gray29Gray30Gray31Gray32Gray33Gray34Gray35Gray36Gray37Gray38Gray39Gray40Gray41Gray42Gray43Gray44Gray45Gray46Gray47Gray48Gray49Gray50Gray51Gray52Gray53Gray54Gray55Gray56Gray57Gray58Gray59Gray60Gray61Gray62Gray63Gray64Gray65Gray66Gray67Gray68Gray69Gray70Gray71Gray72Gray73Gray74Gray75Gray76Gray77Gray78Gray79Gray80Gray81Gray82Gray83Gray84Gray85Gray86Gray87Gray88Gray89Gray90Gray91Gray92Gray93Gray94Gray95Gray96Gray97Gray98Gray99Gray100GreenGreen1Green2Green3Green4 GreenYellowHoneyDew HoneyDew1 HoneyDew2 HoneyDew3 HoneyDew4HotPinkHotPink1HotPink2HotPink3HotPink4 IndianRed IndianRed1 IndianRed2 IndianRed3 IndianRed4IndigoIvoryIvory1Ivory2Ivory3Ivory4KhakiKhaki1Khaki2Khaki3Khaki4Lavender LavenderBlushLavenderBlush1LavenderBlush2LavenderBlush3LavenderBlush4 LawnGreen LemonChiffon LemonChiffon1 LemonChiffon2 LemonChiffon3 LemonChiffon4 LightBlue LightBlue1 LightBlue2 LightBlue3 LightBlue4 LightCoral LightCyan LightCyan1 LightCyan2 LightCyan3 LightCyan4LightGoldenrodLightGoldenrod1LightGoldenrod2LightGoldenrod3LightGoldenrod4LightGoldenrodYellow LightGray LightPink LightPink1 LightPink2 LightPink3 LightPink4 LightSalmon LightSalmon1 LightSalmon2 LightSalmon3 LightSalmon4 LightSeaGreen LightSkyBlue LightSkyBlue1 LightSkyBlue2 LightSkyBlue3 LightSkyBlue4LightSlateBlueLightSlateGrayLightSteelBlueLightSteelBlue1LightSteelBlue2LightSteelBlue3LightSteelBlue4 LightYellow LightYellow1 LightYellow2 LightYellow3 LightYellow4 LimeGreenLinenMagentaMagenta1Magenta2Magenta3Magenta4MaroonMaroon1Maroon2Maroon3Maroon4MediumAquamarine MediumBlue MediumOrchid MediumOrchid1 MediumOrchid2 MediumOrchid3 MediumOrchid4 MediumPurple MediumPurple1 MediumPurple2 MediumPurple3 MediumPurple4MediumSeaGreenMediumSlateBlueMediumSpringGreenMediumTurquoiseMediumVioletRed MidnightBlue MintCream MistyRose MistyRose1 MistyRose2 MistyRose3 MistyRose4Moccasin NavajoWhite NavajoWhite1 NavajoWhite2 NavajoWhite3 NavajoWhite4NavyNavyBlueOldLace OliveDrab OliveDrab1 OliveDrab2 OliveDrab3 OliveDrab4OrangeOrange1Orange2Orange3Orange4 OrangeRed OrangeRed1 OrangeRed2 OrangeRed3 OrangeRed4OrchidOrchid1Orchid2Orchid3Orchid4 PaleGoldenrod PaleGreen PaleGreen1 PaleGreen2 PaleGreen3 PaleGreen4 PaleTurquoisePaleTurquoise1PaleTurquoise2PaleTurquoise3PaleTurquoise4 PaleVioletRedPaleVioletRed1PaleVioletRed2PaleVioletRed3PaleVioletRed4 PapayaWhip PeachPuff PeachPuff1 PeachPuff2 PeachPuff3 PeachPuff4PeruPinkPink1Pink2Pink3Pink4PlumPlum1Plum2Plum3Plum4 PowderBluePurplePurple1Purple2Purple3Purple4RedRed1Red2Red3Red4 RosyBrown RosyBrown1 RosyBrown2 RosyBrown3 RosyBrown4 RoyalBlue RoyalBlue1 RoyalBlue2 RoyalBlue3 RoyalBlue4 SaddleBrownSalmonSalmon1Salmon2Salmon3Salmon4 SandyBrownSeaGreen SeaGreen1 SeaGreen2 SeaGreen3 SeaGreen4SeaShell SeaShell1 SeaShell2 SeaShell3 SeaShell4SiennaSienna1Sienna2Sienna3Sienna4SkyBlueSkyBlue1SkyBlue2SkyBlue3SkyBlue4 SlateBlue SlateBlue1 SlateBlue2 SlateBlue3 SlateBlue4 SlateGray SlateGray1 SlateGray2 SlateGray3 SlateGray4SnowSnow1Snow2Snow3Snow4 SpringGreen SpringGreen1 SpringGreen2 SpringGreen3 SpringGreen4 SteelBlue SteelBlue1 SteelBlue2 SteelBlue3 SteelBlue4TanTan1Tan2Tan3Tan4ThistleThistle1Thistle2Thistle3Thistle4TomatoTomato1Tomato2Tomato3Tomato4 Transparent Turquoise Turquoise1 Turquoise2 Turquoise3 Turquoise4Violet VioletRed VioletRed1 VioletRed2 VioletRed3 VioletRed4WheatWheat1Wheat2Wheat3Wheat4White WhiteSmokeYellowYellow1Yellow2Yellow3Yellow4 YellowGreen x11Colour$fParseDotX11Color$fPrintDotX11Color $fEqX11Color $fOrdX11Color$fBoundedX11Color$fEnumX11Color$fShowX11Color$fReadX11ColorSVGColorAquaCornflowerBlueCornsilkDarkBlueDarkCyanDarkGray DarkKhaki DarkMagentaDarkRedFuchsiaHoneydew LightGreenLimeOliveSilverTeal svgColour$fParseDotSVGColor$fPrintDotSVGColor $fEqSVGColor $fOrdSVGColor$fBoundedSVGColor$fEnumSVGColor$fShowSVGColor$fReadSVGColor BrewerColorBC$fEqBrewerColor$fOrdBrewerColor$fShowBrewerColor$fReadBrewerColor NamedColortoColor WeightedColorWCwColor weighting ColorListColorRGBRGBAHSVredgreenbluealphahue saturationvaluetoWC toColorListtoWColortoColour fromColour fromAColour$fParseDotColor$fParseDotWeightedColor$fPrintDotWeightedColor$fNamedColorSVGColor$fNamedColorX11Color$fNamedColorBrewerColor$fPrintDotColor$fEqWeightedColor$fOrdWeightedColor$fShowWeightedColor$fReadWeightedColor $fEqColor $fOrdColor $fShowColor $fReadColorStyleRoundedRadialSideLeftSide RightSideTopSide BottomSideScale NaturalSizeScaleUniformly ExpandWidth ExpandHeight ExpandBoth CellFormat RuleBetweenVAlignHTopHMiddleHBottomAlignHLeftHCenterHRightHText AttributeBAlignBGColorBorder CellBorder CellPadding CellSpacingColSpanColumnsFace FixedSize GradientAngleHeightHRefID PointSizePortRowsRowSpanSidesSrcTargetTitleWidth AttributesImgCell LabelCellImgCell VerticalRuleRowCellsHorizontalRuleTableHTabletableFontAttrs tableAttrs tableRowsFormatItalicsBold UnderlineOverline Subscript SuperscriptTextItemStrNewlineFontTextLabel$fParseDotFormat$fPrintDotFormat$fParseDotAlign$fPrintDotAlign$fParseDotVAlign$fPrintDotVAlign$fParseDotCellFormat$fPrintDotCellFormat$fParseDotScale$fPrintDotScale$fParseDotSide$fPrintDotSide$fParseDotStyle$fPrintDotStyle$fParseDotAttribute$fPrintDotAttribute $fParseDotImg $fPrintDotImg$fParseDotTextItem$fPrintDotTextItem$fParseDotCell$fPrintDotCell $fParseDotRow $fPrintDotRow$fParseDotTable$fPrintDotTable$fParseDotLabel$fPrintDotLabel $fEqLabel $fOrdLabel $fShowLabel $fReadLabel $fEqTable $fOrdTable $fShowTable $fReadTable$fEqRow$fOrdRow $fShowRow $fReadRow$fEqCell $fOrdCell $fShowCell $fReadCell $fEqTextItem $fOrdTextItem$fShowTextItem$fReadTextItem$fEqImg$fOrdImg $fShowImg $fReadImg $fEqAttribute$fOrdAttribute$fShowAttribute$fReadAttribute $fEqStyle $fOrdStyle$fBoundedStyle $fEnumStyle $fShowStyle $fReadStyle$fEqSide $fOrdSide $fBoundedSide $fEnumSide $fShowSide $fReadSide $fEqScale $fOrdScale$fBoundedScale $fEnumScale $fShowScale $fReadScale$fEqCellFormat$fOrdCellFormat$fBoundedCellFormat$fEnumCellFormat$fShowCellFormat$fReadCellFormat $fEqVAlign $fOrdVAlign$fBoundedVAlign $fEnumVAlign $fShowVAlign $fReadVAlign $fEqAlign $fOrdAlign$fBoundedAlign $fEnumAlign $fShowAlign $fReadAlign $fEqFormat $fOrdFormat$fBoundedFormat $fEnumFormat $fShowFormat $fReadFormatNodeSize GrowAsNeeded SetNodeSize SetShapeSize Normalized IsNormalized NotNormalizedNormalizedAngleNumberIntDblRatios AspectRatio FillRatio CompressRatio ExpandRatio AutoRatio JustificationJLeftJRightJCenter ScaleType UniformScaleNoScale FillWidth FillHeightFillBothPathspathsVerticalPlacementVTopVCenterVBottom FocusTypeXY NodeFocusViewPortVPwValhValzValfocus StyleNameDashedDottedSolid InvisibleFilledStripedWedged DiagonalsTaperedDD StyleItemSItemSTStyle RegularStyle SelfStyle RandomStyle StartType StartStyle StartSeedStartStyleSeed SmoothTypeNoSmoothAvgDist GraphDist PowerDistRNGSpringTriangleSmoothShapeBoxShapePolygonEllipseCircle PointShapeEggTriangle PlainText DiamondShape Trapezium ParallelogramHousePentagonHexagonSeptagonOctagon DoubleCircle DoubleOctagon TripleOctagon InvTriangle InvTrapeziumInvHouseMDiamondMSquareMCircleSquareStarNoteTabFolderBox3D ComponentPromoterCDS TerminatorUTR PrimerSiteRestrictionSiteFivePovOverhangThreePovOverhang NoOverhangAssembly Signature InsulatorRibositeRNAStab ProteaseSite ProteinStab RPromoterRArrowLArrow LPromoterRecordMRecordRankDirFromTopFromLeft FromBottom FromRightRankTypeSameRankMinRank SourceRankMaxRankSinkRankRoot IsCentral NotCentralNodeNameQuadTypeNormalQTFastQTNoQTSplineendPoint startPoint splinePointsPageDirBlBrTlTrRbRtLbLtEdgeType SplineEdges LineEdgesNoEdgesPolyLineOrthoCurved CompoundEdgePosPointPos SplinePosPackModePackNode PackClust PackGraph PackArrayPackDoPackDontPack PackMargin OutputMode BreadthFirst NodesFirst EdgesFirstOrderOutEdgesInEdges LayerListLLLayerID AllLayersLRIntLRNameLayerRangeElemLRIDLRS LayerRangeLLSepLSepOverlap KeepOverlaps ScaleOverlapsScaleXYOverlaps PrismOverlapVoronoiOverlapCompressOverlap VpscOverlap IpsepOverlapPointxCoordyCoordzCoordforcePos LabelScheme NotEdgeLabel CloseToCenterCloseToOldCenterRemoveAndStraighten RecordFieldLabelledTarget FieldLabel FlipFields RecordFieldsStrLabel HtmlLabel RecordLabelModel ShortPathSubSetCircuitMDSModeTypeMajorKKHierIpSep SpringModeMaxEnt GraphSizeGSizewidthheight desiredSize SVGFontNamesSvgNamesPostScriptNamesFontConfigNamesDPointDValPVal DEConstraintsEdgeConstraints NoConstraintsHierConstraintsDirTypeForwardBackBothNoDir ClusterModeLocalGlobal NoClusterRect EscString createPoint ArrowSide BothSides ArrowFill OpenArrow FilledArrow ArrowModifierArrMod arrowFill arrowSide ArrowShapeBoxCrowDiamondDotArrowInvNoArrowNormalTeeVee ArrowTypeATypenormalnoModsopenModCustomAttribute AttributeNameDampingKURLArea ArrowHead ArrowSize ArrowTail Background BoundingBoxBgColorCenter ClusterRankCommentCompound Concentrate ConstraintDecorate DefaultDistDimDimenDirDirEdgeConstraints DistortionDPIEdgeURL EdgeTarget EdgeTooltipEpsilonESep FillColor FontColorFontName FontNamesFontPathFontSize ForceLabelsGroupHeadURLHead_LPHeadClip HeadLabelHeadPort HeadTarget HeadTooltipImage ImagePath ImageScale InputScaleLabelURL LabelAngle LabelDistance LabelFloatLabelFontColor LabelFontName LabelFontSize LabelJustLabelLoc LabelTarget LabelTooltip LandscapeLayerLayers LayerSelectLayoutLenLevels LevelsGapLHeadLHeightLPosLTailLWidthMarginMaxIterMCLimitMinDistMinLenModeMosekNodeSep NoJustify Normalize NoTranslateNslimitNslimit1Ordering Orientation OutputOrderOverlapScaling OverlapShrinkPadPagePenColorPenWidth PeripheriesPinQuadTreeQuantumRankRankSepRatioRectsRegular ReMinCrossRepulsiveForceRotateRotationSameHeadSameTail SamplePoints SearchSizeSep ShowBoxesSizeSkew SmoothingSortVSplinesStart StyleSheetTailURLTail_LPTailClip TailLabelTailPort TailTarget TailTooltipTooltip TrueColorVertices VoroMarginWeight XDotVersionXLabelXLPUnknownAttribute usedByGraphsusedByClustersusedBySubGraphs usedByNodes usedByEdges sameAttributedefaultAttributeValue validUnknownrmUnwantedAttributescustomAttributeisCustomisSpecifiedCustom customValue customName findCustomsfindSpecifiedCustomdeleteCustomAttributesdeleteSpecifiedCustomArrow Labellable toLabelValuetoLabel textLabelxLabel xTextLabel forceLabelstextLabelValuebgColorbgColors fillColor fillColors fontColorpenColorcolorstylestylesdasheddottedsolidinvisboldfilledrounded diagonalsstripedwedgedtaperedradialpenWidth gradientAngleshapearrowTo arrowFromedgeEndsinvdotArrowinvDotoDotinvODotnoArrowteediamondoDiamondcrowboxoBoxveeorderingrank$fLabellable(,)$fLabellablePortName$fLabellableRecordField$fLabellable[]$fLabellableTable$fLabellable[]0$fLabellableLabel$fLabellableBool$fLabellableDouble$fLabellableInt$fLabellable[]1$fLabellableChar$fLabellableText$fLabellableText0DotEdgefromNodetoNodeedgeAttributesDotNodenodeIDnodeAttributesGlobalAttributes GraphAttrs NodeAttrs EdgeAttrsattrsGraphIDNum DotSubGraphDotSG isCluster subGraphID subGraphStmts DotStatementsDotStmts attrStmts subGraphs nodeStmts edgeStmtsDotGraph strictGraph directedGraphgraphIDgraphStatements$fFunctorDotSubGraph$fParseDotDotSubGraph$fPrintDotDotSubGraph$fFunctorDotStatements$fParseDotDotStatements$fPrintDotDotStatements$fFunctorDotGraph$fParseDotDotGraph$fPrintDotDotGraph $fEqDotGraph $fOrdDotGraph$fShowDotGraph$fReadDotGraph$fEqDotSubGraph$fOrdDotSubGraph$fShowDotSubGraph$fReadDotSubGraph$fEqDotStatements$fOrdDotStatements$fShowDotStatements$fReadDotStatements NodeClusterNC NodeLookup ClusterLookupPath ToGraphID toGraphID PPDotRepr ParseDotRepr PrintDotReprDotRepr fromCanonicalgetIDsetIDgraphIsDirected setIsDirected graphIsStrict setStrictness mapDotGraphgraphStructureInformationnodeInformationedgeInformation unAnonymisegraphStructureInformationCleannodeInformationCleanedgeInformationClean graphNodes graphEdges printDotGraph parseDotGraphparseDotGraphLiberally textGraphID$fDotReprDotGraphn$fPrintDotReprDotGraphn$fParseDotReprDotGraphn$fPPDotReprDotGraphn$fToGraphIDDouble$fToGraphIDInteger$fToGraphIDInt$fToGraphIDChar $fToGraphID[]$fToGraphIDTexttoUTF8hPutDothPutCompactDot hGetStricthGetDot writeDotFile readDotFileputDotreadDot runCommandGraphvizCanvasGtkXlibGraphvizOutputBmpCanon DotOutputXDotEpsFigGdGd2GifIcoImapCmapxImapNPCmapxNPJpegPdfPlainPlainExtPngPsPs2SvgSvgZTiffVmlVmlZVrmlWBmpWebP dirCommand undirCommand commandFor runGraphvizrunGraphvizCommand addExtensiongraphvizWithHandlerunGraphvizCanvasrunGraphvizCanvas'isGraphvizInstalledquitWithoutGraphviz$fGraphvizResultGraphvizOutput$fGraphvizResultGraphvizCanvas$fEqGraphvizCanvas$fOrdGraphvizCanvas$fBoundedGraphvizCanvas$fEnumGraphvizCanvas$fReadGraphvizCanvas$fShowGraphvizCanvas$fEqGraphvizOutput$fOrdGraphvizOutput$fShowGraphvizOutput$fReadGraphvizOutputCanonicaliseOptionsCOptsedgesInClustersgroupAttributesdefaultCanonOptionsdotLikeOptions canonicalisecanonicaliseOptionstransitiveReductiontransitiveReductionOptions$fEqTaggedValues$fOrdTaggedValues$fShowTaggedValues$fReadTaggedValues$fEqCanonicaliseOptions$fOrdCanonicaliseOptions$fShowCanonicaliseOptions$fReadCanonicaliseOptions DotStatementGASGDNDEFromGeneralisedDotfromGeneralised$fFunctorDotStatement$fParseDotDotStatement$fPrintDotDotStatement$fFromGeneralisedDotDotGraphn$fFromGeneralisedDotDotGraphn0$fEqDotStatement$fOrdDotStatement$fShowDotStatement$fReadDotStatementDotMdigraphdigraph'graphgraph' graphAttrs nodeAttrs edgeAttrssubgraph anonSubgraphclusternodenode'edge--><-> $fMonoidDotM$fSemigroupDotM$fMonadFixDotM $fMonadDotM$fApplicativeDotM $fFunctorDotMContextCntxt inCluster attributes predecessors successorsadjacent emptyGraph& composeListaddNode addDotNodeaddEdge addDotEdge addClustersetClusterParentsetClusterAttributesmkGraph toCanonical decompose decomposeAny decomposeList deleteNodedeleteAllEdges deleteEdge deleteDotEdge deleteClusterremoveEmptyClustersisEmpty hasClusters isEmptyGraphgraphAttributesfoundInCluster attributesOfpredecessorsOf successorsOf adjacentToparentOfclusterAttributes fromDotReprunsafeFromCanonical $fEqContext $fOrdContext $fShowContext $fReadContext $fEqNodeInfo $fOrdNodeInfo$fShowNodeInfo$fReadNodeInfo$fEqClusterInfo$fOrdClusterInfo$fShowClusterInfo$fReadClusterInfo $fEqGlobAttrs$fOrdGlobAttrs$fShowGlobAttrs$fReadGlobAttrsEdgeID AttributeEdge AttributeNode LNodeClusterGraphvizParamsParams isDirectedglobalAttributes clusterBy isDotCluster clusterID fmtClusterfmtNodefmtEdge quickParams defaultParamsnonClusteredParams blankParamssetDirectedness graphToDotgraphElemsToDot dotToGraph graphToGraph dotizeGraph addEdgeIDssetEdgeIDAttribute dotAttributes augmentGraphpreview $fEqEdgeID $fOrdEdgeID $fShowEdgeID GraphvizState parseStrictlyghc-prim GHC.TypesFalse defLayerSepdefLayerListSepGS directedEdgeslayerSep layerListSep attributeType graphColor clusterColor nodeColor edgeColor AttributeTypeGraphAttributeSubGraphAttributeClusterAttribute NodeAttribute EdgeAttributeGraphvizStateMgetsGSmodifyGS initialStategetDirectednesssetAttributeTypegetAttributeType setLayerSep getLayerSepsetLayerListSepgetLayerListSepsetColorSchemegetColorScheme frstIDStringString restIDStringtoDoubleTrue stringToInt escapeQuotes descapeQuoteskeywordsboolBool isIDString isKeyword createVersionuniquniqBy groupSortBygroupSortCollectByisSingle text-1.2.5.0Data.Text.Internal.Lazy parseIntCheck parseFloatChar Data.Version versionTagsparseOutUnwanted parseUnwantedparsePreProcessorparseLineCommentparseMultiLineCommentparseSplitLineqtChar unqtStringqtString addEscapesparseEdgeBasedPP compassLookup#colour-2.3.6-1epMQ1H8ub798PJSylgRHIData.Colour.Internal AlphaColourColourparseNC' GHC.MaybeMaybeGHC.ShowShowmaxWordGHC.EnummaxBoundGHC.WordWord8JustNothingprintHtmlField unescapeHtml htmlEscapes htmlUnescapesprintTag printEmptyTagparseTag parseTagRep parseEmptyTagDouble printPortName$fParseDotOverlap parseRecordunqtRecordStringrecordEscCharsprintPoint2DUnqt printPoint2D parsePoint2D parseLayerSepparseLayerNameparseLayerName'parseLayerListSepcheckLayerName parseArgscheckDDparseStyleName parseRatio parseNumberparseNormalizedeDiamondopenArrhalfOpenemptyArrinvEmptyspecialArrowParse parseFieldDef liftEqParseSameAttrSAttrstoSAttrunSame unSameSetparseEdgeNodesparseBracesBased printSGID statementEnd numericValuepartitionGlobalunPartitionGlobalwithGlob parseEdgeLine printGraphID parseGraphIDprintStmtBasedprintStmtBasedListprintSubGraphID parseSubGraphparseStatements ClusterTreeclustersToNodes clustToTree sameClust clustOrdergetNodescollapseNClusts treesToDot treeToDotmergePs EdgeState NodeState GraphState recursiveCall getGraphInfo addSubGraphaddGraphGlobals toDotNodes getNodeLookupaddNodeGlobals addEdgeNodes getDotEdgesaddEdgeGlobalsshow GHC.ClassesOrdidrenderCompactDotbytestring-0.11.3.1Data.ByteString.Lazy.Internal ByteStringGHC.IO.Handle.TypesHandleGHC.IO.StdHandlesstdoutstdin hGetContents'GHC.IO.Handle.Text hGetContentssignalWhenDoneGHC.MVarMVarVersionGraphvizResultdefaultExtensionFilePathIOgetCommonGlobsgeneraliseDotGraph"fgl-5.8.2.0-7VVvTYVqpIQJ1LabCeSnUaData.Graph.Inductive.GraphGraphLNodeLEdge isUndirectedGHC.Err undefined GHC.IO.UnsafeunsafePerformIOstripIDgmapnmapemap