packages feed

dotparse 0.1.0.0 → 0.1.0.1

raw patch · 9 files changed

+1518/−328 lines, 9 filesdep +doctest-paralleldep +dotparsedep ~basedep ~template-haskellPVP: minor bump suggested

API additions: PVP suggests at least a minor version bump

Dependencies added: doctest-parallel, dotparse

Dependency ranges changed: base, template-haskell

API changes (from Hackage documentation)

+ DotParse.Examples.NumHask: SemiField :: Class

Files

dotparse.cabal view
@@ -1,6 +1,6 @@ cabal-version: 3.0 name: dotparse-version: 0.1.0.0+version: 0.1.0.1 license: BSD-3-Clause license-file: LICENSE copyright: Tony Day (c) 2020@@ -26,13 +26,15 @@      ![usage example](docs/other/exga.svg) - build-type: Simple-tested-with: GHC == 8.10.7 || ==9.2.8 || ==9.4.5 || ==9.6.2 || ==9.8.1+tested-with:+    , GHC == 9.10.1+    , GHC == 9.8.2+    , GHC == 9.6.5 extra-doc-files:     ChangeLog.md     other/*.svg-    readme.org+    readme.md  source-repository head     type: git@@ -49,60 +51,7 @@         -Wredundant-constraints  common ghc2021-stanza-    if impl ( ghc >= 9.2 )-        default-language: GHC2021--    if impl ( ghc < 9.2 )-        default-language: Haskell2010-        default-extensions:-            BangPatterns-            BinaryLiterals-            ConstrainedClassMethods-            ConstraintKinds-            DeriveDataTypeable-            DeriveFoldable-            DeriveFunctor-            DeriveGeneric-            DeriveLift-            DeriveTraversable-            DoAndIfThenElse-            EmptyCase-            EmptyDataDecls-            EmptyDataDeriving-            ExistentialQuantification-            ExplicitForAll-            FlexibleContexts-            FlexibleInstances-            ForeignFunctionInterface-            GADTSyntax-            GeneralisedNewtypeDeriving-            HexFloatLiterals-            ImplicitPrelude-            InstanceSigs-            KindSignatures-            MonomorphismRestriction-            MultiParamTypeClasses-            NamedFieldPuns-            NamedWildCards-            NumericUnderscores-            PatternGuards-            PolyKinds-            PostfixOperators-            RankNTypes-            RelaxedPolyRec-            ScopedTypeVariables-            StandaloneDeriving-            StarIsType-            TraditionalRecordSyntax-            TupleSections-            TypeApplications-            TypeOperators-            TypeSynonymInstances--    if impl ( ghc < 9.2 ) && impl ( ghc >= 8.10 )-        default-extensions:-            ImportQualifiedPost-            StandaloneKindSignatures+    default-language: GHC2021  library     import: ghc-options-stanza@@ -119,7 +68,7 @@         , optics-core        >=0.4 && <0.5         , process-extras     >=0.7.4 && <0.8         , string-interpolate >=0.3 && <0.4-        , template-haskell   >=2.16 && <2.22+        , template-haskell   >=2.16 && <2.23         , text               >=1.2 && <2.2         , these              >=1.1 && <1.3     exposed-modules:@@ -130,3 +79,14 @@         DotParse.FlatParse         DotParse.FlatParse.TH         DotParse.Types++test-suite doctests+    import: ghc2021-stanza+    main-is: doctests.hs+    hs-source-dirs: test+    build-depends:+        , base             >=4.14 && <5+        , doctest-parallel >=0.3 && <0.4+        , dotparse+    ghc-options: -threaded+    type: exitcode-stdio-1.0
+ other/ast10.svg view
@@ -0,0 +1,1114 @@+<?xml version="1.0" encoding="UTF-8" standalone="no"?>+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">+<!-- Generated by graphviz version 9.0.0 (20230911.1827)+ -->+<!-- Pages: 1 -->+<svg width="339pt" height="360pt"+ viewBox="0.00 0.00 339.06 360.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">+<g id="graph0" class="graph" transform="scale(0.200865 0.200865) rotate(0) translate(4 1788.25)">+<polygon fill="white" stroke="none" points="-4,4 -4,-1788.25 1684,-1788.25 1684,4 -4,4"/>+<!-- Tree -->+<g id="node1" class="node">+<title>Tree</title>+<g id="a_node1"><a xlink:href="https://hackage.haskell.org/package/containers/docs/Data-Tree.html#t:Tree" xlink:title="&lt;xTree&gt; Tree">+<polygon fill="none" stroke="black" points="401.75,-1397 401.75,-1433 455.75,-1433 455.75,-1397 401.75,-1397"/>+<text text-anchor="middle" x="428.75" y="-1410.2" font-family="Times,serif" font-size="14.00">Tree</text>+</a>+</g>+</g>+<!-- TitleOptions -->+<g id="node2" class="node">+<title>TitleOptions</title>+<g id="a_node2"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Hud.html#t:TitleOptions" xlink:title="&lt;xTitleOptions&gt; TitleOptions| &lt;xtext&gt; text| &lt;xstyle&gt; style| &lt;xplace&gt; place| &lt;xbuffer&gt; buffer| &lt;xanchor&gt; anchor">+<polygon fill="none" stroke="black" points="632.12,-1192.5 632.12,-1339.5 716.38,-1339.5 716.38,-1192.5 632.12,-1192.5"/>+<text text-anchor="middle" x="674.25" y="-1322.2" font-family="Times,serif" font-size="14.00">TitleOptions</text>+<polyline fill="none" stroke="black" points="632.12,-1315 716.38,-1315"/>+<text text-anchor="middle" x="674.25" y="-1297.7" font-family="Times,serif" font-size="14.00">text</text>+<polyline fill="none" stroke="black" points="632.12,-1290.5 716.38,-1290.5"/>+<text text-anchor="middle" x="674.25" y="-1273.2" font-family="Times,serif" font-size="14.00">style</text>+<polyline fill="none" stroke="black" points="632.12,-1266 716.38,-1266"/>+<text text-anchor="middle" x="674.25" y="-1248.7" font-family="Times,serif" font-size="14.00">place</text>+<polyline fill="none" stroke="black" points="632.12,-1241.5 716.38,-1241.5"/>+<text text-anchor="middle" x="674.25" y="-1224.2" font-family="Times,serif" font-size="14.00">buffer</text>+<polyline fill="none" stroke="black" points="632.12,-1217 716.38,-1217"/>+<text text-anchor="middle" x="674.25" y="-1199.7" font-family="Times,serif" font-size="14.00">anchor</text>+</a>+</g>+</g>+<!-- Style -->+<g id="node7" class="node">+<title>Style</title>+<g id="a_node7"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Style.html#t:Style" xlink:title="&lt;xStyle&gt; Style| &lt;xvsize&gt; vsize| &lt;xvshift&gt; vshift| &lt;xtranslate&gt; translate| &lt;xsize&gt; size| &lt;xscaleP&gt; scaleP| &lt;xrotation&gt; rotation| &lt;xlineJoin&gt; lineJoin| &lt;xlineCap&gt; lineCap| &lt;xhsize&gt; hsize| &lt;xglyphShape&gt; glyphShape| &lt;xframe&gt; frame| &lt;xescapeText&gt; escapeText| &lt;xdashoffset&gt; dashoffset| &lt;xdasharray&gt; dasharray| &lt;xcolor&gt; color| &lt;xborderSize&gt; borderSize| &lt;xborderColor&gt; borderColor| &lt;xanchor&gt; anchor">+<polygon fill="none" stroke="black" points="1136.62,-670.25 1136.62,-1135.75 1218.62,-1135.75 1218.62,-670.25 1136.62,-670.25"/>+<text text-anchor="middle" x="1177.62" y="-1118.45" font-family="Times,serif" font-size="14.00">Style</text>+<polyline fill="none" stroke="black" points="1136.62,-1111.25 1218.62,-1111.25"/>+<text text-anchor="middle" x="1177.62" y="-1093.95" font-family="Times,serif" font-size="14.00">vsize</text>+<polyline fill="none" stroke="black" points="1136.62,-1086.75 1218.62,-1086.75"/>+<text text-anchor="middle" x="1177.62" y="-1069.45" font-family="Times,serif" font-size="14.00">vshift</text>+<polyline fill="none" stroke="black" points="1136.62,-1062.25 1218.62,-1062.25"/>+<text text-anchor="middle" x="1177.62" y="-1044.95" font-family="Times,serif" font-size="14.00">translate</text>+<polyline fill="none" stroke="black" points="1136.62,-1037.75 1218.62,-1037.75"/>+<text text-anchor="middle" x="1177.62" y="-1020.45" font-family="Times,serif" font-size="14.00">size</text>+<polyline fill="none" stroke="black" points="1136.62,-1013.25 1218.62,-1013.25"/>+<text text-anchor="middle" x="1177.62" y="-995.95" font-family="Times,serif" font-size="14.00">scaleP</text>+<polyline fill="none" stroke="black" points="1136.62,-988.75 1218.62,-988.75"/>+<text text-anchor="middle" x="1177.62" y="-971.45" font-family="Times,serif" font-size="14.00">rotation</text>+<polyline fill="none" stroke="black" points="1136.62,-964.25 1218.62,-964.25"/>+<text text-anchor="middle" x="1177.62" y="-946.95" font-family="Times,serif" font-size="14.00">lineJoin</text>+<polyline fill="none" stroke="black" points="1136.62,-939.75 1218.62,-939.75"/>+<text text-anchor="middle" x="1177.62" y="-922.45" font-family="Times,serif" font-size="14.00">lineCap</text>+<polyline fill="none" stroke="black" points="1136.62,-915.25 1218.62,-915.25"/>+<text text-anchor="middle" x="1177.62" y="-897.95" font-family="Times,serif" font-size="14.00">hsize</text>+<polyline fill="none" stroke="black" points="1136.62,-890.75 1218.62,-890.75"/>+<text text-anchor="middle" x="1177.62" y="-873.45" font-family="Times,serif" font-size="14.00">glyphShape</text>+<polyline fill="none" stroke="black" points="1136.62,-866.25 1218.62,-866.25"/>+<text text-anchor="middle" x="1177.62" y="-848.95" font-family="Times,serif" font-size="14.00">frame</text>+<polyline fill="none" stroke="black" points="1136.62,-841.75 1218.62,-841.75"/>+<text text-anchor="middle" x="1177.62" y="-824.45" font-family="Times,serif" font-size="14.00">escapeText</text>+<polyline fill="none" stroke="black" points="1136.62,-817.25 1218.62,-817.25"/>+<text text-anchor="middle" x="1177.62" y="-799.95" font-family="Times,serif" font-size="14.00">dashoffset</text>+<polyline fill="none" stroke="black" points="1136.62,-792.75 1218.62,-792.75"/>+<text text-anchor="middle" x="1177.62" y="-775.45" font-family="Times,serif" font-size="14.00">dasharray</text>+<polyline fill="none" stroke="black" points="1136.62,-768.25 1218.62,-768.25"/>+<text text-anchor="middle" x="1177.62" y="-750.95" font-family="Times,serif" font-size="14.00">color</text>+<polyline fill="none" stroke="black" points="1136.62,-743.75 1218.62,-743.75"/>+<text text-anchor="middle" x="1177.62" y="-726.45" font-family="Times,serif" font-size="14.00">borderSize</text>+<polyline fill="none" stroke="black" points="1136.62,-719.25 1218.62,-719.25"/>+<text text-anchor="middle" x="1177.62" y="-701.95" font-family="Times,serif" font-size="14.00">borderColor</text>+<polyline fill="none" stroke="black" points="1136.62,-694.75 1218.62,-694.75"/>+<text text-anchor="middle" x="1177.62" y="-677.45" font-family="Times,serif" font-size="14.00">anchor</text>+</a>+</g>+</g>+<!-- TitleOptions&#45;&gt;Style -->+<g id="edge1" class="edge">+<title>TitleOptions:xstyle&#45;&gt;Style:xStyle</title>+<path fill="none" stroke="black" d="M717.25,-1278C743.47,-1278 739.84,-1304.81 764.75,-1313 807.82,-1327.15 823.3,-1325.92 866.75,-1313 976.73,-1280.31 992.26,-1242.22 1083,-1172 1106.18,-1154.06 1104.41,-1128.2 1129.14,-1124.46"/>+<polygon fill="black" stroke="black" points="1129.25,-1126.2 1134.12,-1124.11 1129,-1122.71 1129.25,-1126.2"/>+</g>+<!-- Place -->+<g id="node15" class="node">+<title>Place</title>+<g id="a_node15"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Hud.html#t:Place" xlink:title="&lt;xPlace&gt; Place| &lt;xPlaceTop&gt; PlaceTop| &lt;xPlaceRight&gt; PlaceRight| &lt;xPlaceLeft&gt; PlaceLeft| &lt;xPlaceBottom&gt; PlaceBottom| &lt;xPlaceAbsolute&gt; PlaceAbsolute">+<polygon fill="none" stroke="black" points="884.75,-919.5 884.75,-1066.5 978.75,-1066.5 978.75,-919.5 884.75,-919.5"/>+<text text-anchor="middle" x="931.75" y="-1049.2" font-family="Times,serif" font-size="14.00">Place</text>+<polyline fill="none" stroke="black" points="884.75,-1042 978.75,-1042"/>+<text text-anchor="middle" x="931.75" y="-1024.7" font-family="Times,serif" font-size="14.00">PlaceTop</text>+<polyline fill="none" stroke="black" points="884.75,-1017.5 978.75,-1017.5"/>+<text text-anchor="middle" x="931.75" y="-1000.2" font-family="Times,serif" font-size="14.00">PlaceRight</text>+<polyline fill="none" stroke="black" points="884.75,-993 978.75,-993"/>+<text text-anchor="middle" x="931.75" y="-975.7" font-family="Times,serif" font-size="14.00">PlaceLeft</text>+<polyline fill="none" stroke="black" points="884.75,-968.5 978.75,-968.5"/>+<text text-anchor="middle" x="931.75" y="-951.2" font-family="Times,serif" font-size="14.00">PlaceBottom</text>+<polyline fill="none" stroke="black" points="884.75,-944 978.75,-944"/>+<text text-anchor="middle" x="931.75" y="-926.7" font-family="Times,serif" font-size="14.00">PlaceAbsolute</text>+</a>+</g>+</g>+<!-- TitleOptions&#45;&gt;Place -->+<g id="edge2" class="edge">+<title>TitleOptions:xplace&#45;&gt;Place:xPlace</title>+<path fill="none" stroke="black" d="M717.25,-1254C751.42,-1254 737.49,-1215.89 746.75,-1183 753.76,-1158.1 746.11,-1085.93 764.75,-1068 801.87,-1032.31 828.77,-1052.2 878.27,-1053.89"/>+<polygon fill="black" stroke="black" points="878.21,-1055.64 883.24,-1053.97 878.27,-1052.14 878.21,-1055.64"/>+</g>+<!-- Anchor -->+<g id="node38" class="node">+<title>Anchor</title>+<g id="a_node38"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Style.html#t:Anchor" xlink:title="&lt;xAnchor&gt; Anchor| &lt;xAnchorStart&gt; AnchorStart| &lt;xAnchorMiddle&gt; AnchorMiddle| &lt;xAnchorEnd&gt; AnchorEnd">+<polygon fill="none" stroke="black" points="1375.75,-739 1375.75,-837 1472,-837 1472,-739 1375.75,-739"/>+<text text-anchor="middle" x="1423.88" y="-819.7" font-family="Times,serif" font-size="14.00">Anchor</text>+<polyline fill="none" stroke="black" points="1375.75,-812.5 1472,-812.5"/>+<text text-anchor="middle" x="1423.88" y="-795.2" font-family="Times,serif" font-size="14.00">AnchorStart</text>+<polyline fill="none" stroke="black" points="1375.75,-788 1472,-788"/>+<text text-anchor="middle" x="1423.88" y="-770.7" font-family="Times,serif" font-size="14.00">AnchorMiddle</text>+<polyline fill="none" stroke="black" points="1375.75,-763.5 1472,-763.5"/>+<text text-anchor="middle" x="1423.88" y="-746.2" font-family="Times,serif" font-size="14.00">AnchorEnd</text>+</a>+</g>+</g>+<!-- TitleOptions&#45;&gt;Anchor -->+<g id="edge3" class="edge">+<title>TitleOptions:xanchor&#45;&gt;Anchor:xAnchor</title>+<path fill="none" stroke="black" d="M717.25,-1205C792.52,-1205 809.69,-1224.43 884.75,-1230 1052.8,-1242.47 1105.06,-1223.35 1254.25,-1145 1299.36,-1121.31 1320.23,-1118.93 1344.25,-1074 1368.11,-1029.38 1327.67,-883.94 1362.25,-847 1370.08,-838.63 1407.2,-847.44 1419.73,-842.86"/>+<polygon fill="black" stroke="black" points="1420.98,-844.09 1422.89,-839.15 1418.32,-841.82 1420.98,-844.09"/>+</g>+<!-- Ticks -->+<g id="node3" class="node">+<title>Ticks</title>+<g id="a_node3"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Hud.html#t:Ticks" xlink:title="&lt;xTicks&gt; Ticks| &lt;xtick&gt; tick| &lt;xtextTick&gt; textTick| &lt;xlineTick&gt; lineTick| &lt;xglyphTick&gt; glyphTick">+<polygon fill="none" stroke="black" points="638.5,-599.75 638.5,-722.25 710,-722.25 710,-599.75 638.5,-599.75"/>+<text text-anchor="middle" x="674.25" y="-704.95" font-family="Times,serif" font-size="14.00">Ticks</text>+<polyline fill="none" stroke="black" points="638.5,-697.75 710,-697.75"/>+<text text-anchor="middle" x="674.25" y="-680.45" font-family="Times,serif" font-size="14.00">tick</text>+<polyline fill="none" stroke="black" points="638.5,-673.25 710,-673.25"/>+<text text-anchor="middle" x="674.25" y="-655.95" font-family="Times,serif" font-size="14.00">textTick</text>+<polyline fill="none" stroke="black" points="638.5,-648.75 710,-648.75"/>+<text text-anchor="middle" x="674.25" y="-631.45" font-family="Times,serif" font-size="14.00">lineTick</text>+<polyline fill="none" stroke="black" points="638.5,-624.25 710,-624.25"/>+<text text-anchor="middle" x="674.25" y="-606.95" font-family="Times,serif" font-size="14.00">glyphTick</text>+</a>+</g>+</g>+<!-- TickStyle -->+<g id="node4" class="node">+<title>TickStyle</title>+<g id="a_node4"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Hud.html#t:TickStyle" xlink:title="&lt;xTickStyle&gt; TickStyle| &lt;xstyle&gt; style| &lt;xbuffer&gt; buffer| &lt;xanchorTo&gt; anchorTo">+<polygon fill="none" stroke="black" points="897.5,-510 897.5,-608 966,-608 966,-510 897.5,-510"/>+<text text-anchor="middle" x="931.75" y="-590.7" font-family="Times,serif" font-size="14.00">TickStyle</text>+<polyline fill="none" stroke="black" points="897.5,-583.5 966,-583.5"/>+<text text-anchor="middle" x="931.75" y="-566.2" font-family="Times,serif" font-size="14.00">style</text>+<polyline fill="none" stroke="black" points="897.5,-559 966,-559"/>+<text text-anchor="middle" x="931.75" y="-541.7" font-family="Times,serif" font-size="14.00">buffer</text>+<polyline fill="none" stroke="black" points="897.5,-534.5 966,-534.5"/>+<text text-anchor="middle" x="931.75" y="-517.2" font-family="Times,serif" font-size="14.00">anchorTo</text>+</a>+</g>+</g>+<!-- Ticks&#45;&gt;TickStyle -->+<g id="edge5" class="edge">+<title>Ticks:xtextTick&#45;&gt;TickStyle:xTickStyle</title>+<path fill="none" stroke="black" d="M711.25,-661C780.43,-661 808.94,-692 866.75,-654 888.92,-639.43 871.38,-603.04 890.36,-596.89"/>+<polygon fill="black" stroke="black" points="890.54,-598.63 895.25,-596.21 890.06,-595.16 890.54,-598.63"/>+<text text-anchor="middle" x="815.75" y="-675.2" font-family="Times,serif" font-size="14.00">_Just</text>+</g>+<!-- Ticks&#45;&gt;TickStyle -->+<g id="edge6" class="edge">+<title>Ticks:xlineTick&#45;&gt;TickStyle:xTickStyle</title>+<path fill="none" stroke="black" d="M711.25,-636C746.15,-636 833.85,-625.65 866.75,-614 879.12,-609.62 880.9,-599.82 890.5,-596.86"/>+<polygon fill="black" stroke="black" points="890.54,-598.62 895.25,-596.21 890.06,-595.15 890.54,-598.62"/>+<text text-anchor="middle" x="815.75" y="-635.2" font-family="Times,serif" font-size="14.00">_Just</text>+</g>+<!-- Ticks&#45;&gt;TickStyle -->+<g id="edge7" class="edge">+<title>Ticks:xglyphTick&#45;&gt;TickStyle:xTickStyle</title>+<path fill="none" stroke="black" d="M711.25,-612C736.41,-612 739.94,-597.67 764.75,-593.5 809.46,-585.99 821.46,-591.62 866.75,-593.5 877.82,-593.96 881.95,-595.37 890.65,-595.84"/>+<polygon fill="black" stroke="black" points="890.19,-597.58 895.24,-595.96 890.28,-594.08 890.19,-597.58"/>+<text text-anchor="middle" x="815.75" y="-596.2" font-family="Times,serif" font-size="14.00">_Just</text>+</g>+<!-- Tick -->+<g id="node6" class="node">+<title>Tick</title>+<g id="a_node6"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Hud.html#t:Tick" xlink:title="&lt;xTick&gt; Tick| &lt;xtickExtend&#39;&gt; tickExtend&#39;| &lt;xnumTicks&#39;&gt; numTicks&#39;| &lt;xformatN&#39;&gt; formatN&#39;| &lt;xTickRound&gt; TickRound| &lt;xTickPlaced&gt; TickPlaced| &lt;xTickNone&gt; TickNone| &lt;xTickLabels&gt; TickLabels| &lt;xTickExact&gt; TickExact">+<polygon fill="none" stroke="black" points="893.38,-626.75 893.38,-847.25 970.12,-847.25 970.12,-626.75 893.38,-626.75"/>+<text text-anchor="middle" x="931.75" y="-829.95" font-family="Times,serif" font-size="14.00">Tick</text>+<polyline fill="none" stroke="black" points="893.38,-822.75 970.12,-822.75"/>+<text text-anchor="middle" x="931.75" y="-805.45" font-family="Times,serif" font-size="14.00">tickExtend&#39;</text>+<polyline fill="none" stroke="black" points="893.38,-798.25 970.12,-798.25"/>+<text text-anchor="middle" x="931.75" y="-780.95" font-family="Times,serif" font-size="14.00">numTicks&#39;</text>+<polyline fill="none" stroke="black" points="893.38,-773.75 970.12,-773.75"/>+<text text-anchor="middle" x="931.75" y="-756.45" font-family="Times,serif" font-size="14.00">formatN&#39;</text>+<polyline fill="none" stroke="black" points="893.38,-749.25 970.12,-749.25"/>+<text text-anchor="middle" x="931.75" y="-731.95" font-family="Times,serif" font-size="14.00">TickRound</text>+<polyline fill="none" stroke="black" points="893.38,-724.75 970.12,-724.75"/>+<text text-anchor="middle" x="931.75" y="-707.45" font-family="Times,serif" font-size="14.00">TickPlaced</text>+<polyline fill="none" stroke="black" points="893.38,-700.25 970.12,-700.25"/>+<text text-anchor="middle" x="931.75" y="-682.95" font-family="Times,serif" font-size="14.00">TickNone</text>+<polyline fill="none" stroke="black" points="893.38,-675.75 970.12,-675.75"/>+<text text-anchor="middle" x="931.75" y="-658.45" font-family="Times,serif" font-size="14.00">TickLabels</text>+<polyline fill="none" stroke="black" points="893.38,-651.25 970.12,-651.25"/>+<text text-anchor="middle" x="931.75" y="-633.95" font-family="Times,serif" font-size="14.00">TickExact</text>+</a>+</g>+</g>+<!-- Ticks&#45;&gt;Tick -->+<g id="edge4" class="edge">+<title>Ticks:xtick&#45;&gt;Tick:xTick</title>+<path fill="none" stroke="black" d="M711.25,-686C813.48,-686 789.44,-828.95 886.49,-834.81"/>+<polygon fill="black" stroke="black" points="886.19,-836.56 891.24,-834.96 886.29,-833.06 886.19,-836.56"/>+<text text-anchor="middle" x="815.75" y="-833.2" font-family="Times,serif" font-size="14.00">_Just</text>+</g>+<!-- TickStyle&#45;&gt;Style -->+<g id="edge8" class="edge">+<title>TickStyle:xstyle&#45;&gt;Style:xStyle</title>+<path fill="none" stroke="black" d="M966.75,-571C1018.79,-571 1046.62,-547.79 1083,-585 1123.59,-626.51 1078.83,-1089.69 1129.68,-1122.2"/>+<polygon fill="black" stroke="black" points="1128.88,-1123.79 1134.18,-1123.56 1129.9,-1120.44 1128.88,-1123.79"/>+</g>+<!-- HudChartSection -->+<g id="node22" class="node">+<title>HudChartSection</title>+<g id="a_node22"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Hud.html#t:HudChartSection" xlink:title="&lt;xHudChartSection&gt; HudChartSection| &lt;xHudStyleSection&gt; HudStyleSection| &lt;xHudSection&gt; HudSection| &lt;xCanvasStyleSection&gt; CanvasStyleSection| &lt;xCanvasSection&gt; CanvasSection">+<polygon fill="none" stroke="black" points="1115.62,-245.75 1115.62,-368.25 1239.62,-368.25 1239.62,-245.75 1115.62,-245.75"/>+<text text-anchor="middle" x="1177.62" y="-350.95" font-family="Times,serif" font-size="14.00">HudChartSection</text>+<polyline fill="none" stroke="black" points="1115.62,-343.75 1239.62,-343.75"/>+<text text-anchor="middle" x="1177.62" y="-326.45" font-family="Times,serif" font-size="14.00">HudStyleSection</text>+<polyline fill="none" stroke="black" points="1115.62,-319.25 1239.62,-319.25"/>+<text text-anchor="middle" x="1177.62" y="-301.95" font-family="Times,serif" font-size="14.00">HudSection</text>+<polyline fill="none" stroke="black" points="1115.62,-294.75 1239.62,-294.75"/>+<text text-anchor="middle" x="1177.62" y="-277.45" font-family="Times,serif" font-size="14.00">CanvasStyleSection</text>+<polyline fill="none" stroke="black" points="1115.62,-270.25 1239.62,-270.25"/>+<text text-anchor="middle" x="1177.62" y="-252.95" font-family="Times,serif" font-size="14.00">CanvasSection</text>+</a>+</g>+</g>+<!-- TickStyle&#45;&gt;HudChartSection -->+<g id="edge9" class="edge">+<title>TickStyle:xanchorTo&#45;&gt;HudChartSection:xHudChartSection</title>+<path fill="none" stroke="black" d="M966.75,-522C977.89,-522 974.01,-510.08 978.75,-500 987.92,-480.51 984.12,-472.45 996.75,-455 1005.91,-442.33 1082.52,-370.11 1108.68,-357.79"/>+<polygon fill="black" stroke="black" points="1108.89,-359.55 1113.18,-356.44 1107.88,-356.2 1108.89,-359.55"/>+</g>+<!-- TickExtend -->+<g id="node5" class="node">+<title>TickExtend</title>+<g id="a_node5"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Hud.html#t:TickExtend" xlink:title="&lt;xTickExtend&gt; TickExtend| &lt;xNoTickExtend&gt; NoTickExtend">+<polygon fill="none" stroke="black" points="1129.88,-602.5 1129.88,-651.5 1225.38,-651.5 1225.38,-602.5 1129.88,-602.5"/>+<text text-anchor="middle" x="1177.62" y="-634.2" font-family="Times,serif" font-size="14.00">TickExtend</text>+<polyline fill="none" stroke="black" points="1129.88,-627 1225.38,-627"/>+<text text-anchor="middle" x="1177.62" y="-609.7" font-family="Times,serif" font-size="14.00">NoTickExtend</text>+</a>+</g>+</g>+<!-- Tick&#45;&gt;TickExtend -->+<g id="edge10" class="edge">+<title>Tick:xtickExtend&#39;&#45;&gt;TickExtend:xTickExtend</title>+<path fill="none" stroke="black" d="M970.75,-811C1072.29,-811 1026.92,-646.31 1122.15,-639.23"/>+<polygon fill="black" stroke="black" points="1122.18,-640.98 1127.11,-639.05 1122.05,-637.49 1122.18,-640.98"/>+<text text-anchor="middle" x="1039.88" y="-809.2" font-family="Times,serif" font-size="14.00">_Just</text>+</g>+<!-- FormatN -->+<g id="node25" class="node">+<title>FormatN</title>+<g id="a_node25"><a xlink:href="https://hackage.haskell.org/package/formatn/docs/Data-FormatN.html#t:FormatN" xlink:title="&lt;xFormatN&gt; FormatN| &lt;xsigFigs&gt; sigFigs| &lt;xmaxDistinguishIterations&gt; maxDistinguishIterations| &lt;xfstyle&gt; fstyle| &lt;xcutRightZeros&gt; cutRightZeros| &lt;xaddLPad&gt; addLPad">+<polygon fill="none" stroke="black" points="1101,-414.5 1101,-561.5 1254.25,-561.5 1254.25,-414.5 1101,-414.5"/>+<text text-anchor="middle" x="1177.62" y="-544.2" font-family="Times,serif" font-size="14.00">FormatN</text>+<polyline fill="none" stroke="black" points="1101,-537 1254.25,-537"/>+<text text-anchor="middle" x="1177.62" y="-519.7" font-family="Times,serif" font-size="14.00">sigFigs</text>+<polyline fill="none" stroke="black" points="1101,-512.5 1254.25,-512.5"/>+<text text-anchor="middle" x="1177.62" y="-495.2" font-family="Times,serif" font-size="14.00">maxDistinguishIterations</text>+<polyline fill="none" stroke="black" points="1101,-488 1254.25,-488"/>+<text text-anchor="middle" x="1177.62" y="-470.7" font-family="Times,serif" font-size="14.00">fstyle</text>+<polyline fill="none" stroke="black" points="1101,-463.5 1254.25,-463.5"/>+<text text-anchor="middle" x="1177.62" y="-446.2" font-family="Times,serif" font-size="14.00">cutRightZeros</text>+<polyline fill="none" stroke="black" points="1101,-439 1254.25,-439"/>+<text text-anchor="middle" x="1177.62" y="-421.7" font-family="Times,serif" font-size="14.00">addLPad</text>+</a>+</g>+</g>+<!-- Tick&#45;&gt;FormatN -->+<g id="edge11" class="edge">+<title>Tick:xformatN&#39;&#45;&gt;FormatN:xFormatN</title>+<path fill="none" stroke="black" d="M970.75,-762C1028.15,-762 967.22,-684.72 996.75,-635.5 1026.58,-585.79 1039.8,-551.61 1094.49,-549.14"/>+<polygon fill="black" stroke="black" points="1094.53,-550.89 1099.49,-549.03 1094.45,-547.39 1094.53,-550.89"/>+<text text-anchor="middle" x="1039.88" y="-638.2" font-family="Times,serif" font-size="14.00">_Just</text>+</g>+<!-- Style&#45;&gt;Style -->+<g id="edge17" class="edge">+<title>Style:xframe&#45;&gt;Style:xStyle</title>+<path fill="none" stroke="black" d="M1136.16,-852.56C1104.05,-859.77 1071.31,-891.12 1071.31,-989 1071.31,-1080.76 1100.09,-1114.05 1130.14,-1123.8"/>+<polygon fill="black" stroke="black" points="1129.41,-1125.41 1134.7,-1125.04 1130.34,-1122.04 1129.41,-1125.41"/>+<text text-anchor="middle" x="1057.44" y="-897.95" font-family="Times,serif" font-size="14.00">_Just</text>+</g>+<!-- ScaleP -->+<g id="node9" class="node">+<title>ScaleP</title>+<g id="a_node9"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Style.html#t:ScaleP" xlink:title="&lt;xScaleP&gt; ScaleP| &lt;xScalePY&gt; ScalePY| &lt;xScalePX&gt; ScalePX| &lt;xScalePMinDim&gt; ScalePMinDim| &lt;xScalePArea&gt; ScalePArea| &lt;xNoScaleP&gt; NoScaleP">+<polygon fill="none" stroke="black" points="1373.5,-1090.5 1373.5,-1237.5 1474.25,-1237.5 1474.25,-1090.5 1373.5,-1090.5"/>+<text text-anchor="middle" x="1423.88" y="-1220.2" font-family="Times,serif" font-size="14.00">ScaleP</text>+<polyline fill="none" stroke="black" points="1373.5,-1213 1474.25,-1213"/>+<text text-anchor="middle" x="1423.88" y="-1195.7" font-family="Times,serif" font-size="14.00">ScalePY</text>+<polyline fill="none" stroke="black" points="1373.5,-1188.5 1474.25,-1188.5"/>+<text text-anchor="middle" x="1423.88" y="-1171.2" font-family="Times,serif" font-size="14.00">ScalePX</text>+<polyline fill="none" stroke="black" points="1373.5,-1164 1474.25,-1164"/>+<text text-anchor="middle" x="1423.88" y="-1146.7" font-family="Times,serif" font-size="14.00">ScalePMinDim</text>+<polyline fill="none" stroke="black" points="1373.5,-1139.5 1474.25,-1139.5"/>+<text text-anchor="middle" x="1423.88" y="-1122.2" font-family="Times,serif" font-size="14.00">ScalePArea</text>+<polyline fill="none" stroke="black" points="1373.5,-1115 1474.25,-1115"/>+<text text-anchor="middle" x="1423.88" y="-1097.7" font-family="Times,serif" font-size="14.00">NoScaleP</text>+</a>+</g>+</g>+<!-- Style&#45;&gt;ScaleP -->+<g id="edge13" class="edge">+<title>Style:xscaleP&#45;&gt;ScaleP:xScaleP</title>+<path fill="none" stroke="black" d="M1219.62,-1001C1233.58,-1001 1340.12,-1192.98 1367.82,-1221.48"/>+<polygon fill="black" stroke="black" points="1366.53,-1222.71 1371.63,-1224.14 1368.53,-1219.84 1366.53,-1222.71"/>+</g>+<!-- Point -->+<g id="node14" class="node">+<title>Point</title>+<g id="a_node14"><a xlink:href="https://hackage.haskell.org/package/numhask-space/docs/NumHask-Space-Point.html#t:Point" xlink:title="&lt;xPoint&gt; Point| &lt;x_y&gt; _y| &lt;x_x&gt; _x">+<polygon fill="none" stroke="black" points="1618,-1265.25 1618,-1338.75 1672,-1338.75 1672,-1265.25 1618,-1265.25"/>+<text text-anchor="middle" x="1645" y="-1321.45" font-family="Times,serif" font-size="14.00">Point</text>+<polyline fill="none" stroke="black" points="1618,-1314.25 1672,-1314.25"/>+<text text-anchor="middle" x="1645" y="-1296.95" font-family="Times,serif" font-size="14.00">_y</text>+<polyline fill="none" stroke="black" points="1618,-1289.75 1672,-1289.75"/>+<text text-anchor="middle" x="1645" y="-1272.45" font-family="Times,serif" font-size="14.00">_x</text>+</a>+</g>+</g>+<!-- Style&#45;&gt;Point -->+<g id="edge12" class="edge">+<title>Style:xtranslate&#45;&gt;Point:xPoint</title>+<path fill="none" stroke="black" d="M1219.62,-1050C1268.67,-1050 1243.95,-1106.94 1272.25,-1147 1306.75,-1195.84 1311.81,-1214.89 1362.25,-1247 1452.3,-1304.32 1491.3,-1281.59 1592,-1317 1601,-1320.16 1603.93,-1324.64 1610.81,-1326.32"/>+<polygon fill="black" stroke="black" points="1610.33,-1328.03 1615.5,-1326.84 1610.72,-1324.55 1610.33,-1328.03"/>+<text text-anchor="middle" x="1423.88" y="-1295.2" font-family="Times,serif" font-size="14.00">_Just</text>+</g>+<!-- LineJoin -->+<g id="node18" class="node">+<title>LineJoin</title>+<g id="a_node18"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Style.html#t:LineJoin" xlink:title="&lt;xLineJoin&gt; LineJoin| &lt;xLineJoinRound&gt; LineJoinRound| &lt;xLineJoinMiter&gt; LineJoinMiter| &lt;xLineJoinBevel&gt; LineJoinBevel">+<polygon fill="none" stroke="black" points="1374.25,-973 1374.25,-1071 1473.5,-1071 1473.5,-973 1374.25,-973"/>+<text text-anchor="middle" x="1423.88" y="-1053.7" font-family="Times,serif" font-size="14.00">LineJoin</text>+<polyline fill="none" stroke="black" points="1374.25,-1046.5 1473.5,-1046.5"/>+<text text-anchor="middle" x="1423.88" y="-1029.2" font-family="Times,serif" font-size="14.00">LineJoinRound</text>+<polyline fill="none" stroke="black" points="1374.25,-1022 1473.5,-1022"/>+<text text-anchor="middle" x="1423.88" y="-1004.7" font-family="Times,serif" font-size="14.00">LineJoinMiter</text>+<polyline fill="none" stroke="black" points="1374.25,-997.5 1473.5,-997.5"/>+<text text-anchor="middle" x="1423.88" y="-980.2" font-family="Times,serif" font-size="14.00">LineJoinBevel</text>+</a>+</g>+</g>+<!-- Style&#45;&gt;LineJoin -->+<g id="edge14" class="edge">+<title>Style:xlineJoin&#45;&gt;LineJoin:xLineJoin</title>+<path fill="none" stroke="black" d="M1219.62,-952C1300.59,-952 1290.4,-1053.64 1366.73,-1058.8"/>+<polygon fill="black" stroke="black" points="1366.31,-1060.53 1371.36,-1058.95 1366.42,-1057.04 1366.31,-1060.53"/>+<text text-anchor="middle" x="1308.25" y="-1056.2" font-family="Times,serif" font-size="14.00">_Just</text>+</g>+<!-- LineCap -->+<g id="node19" class="node">+<title>LineCap</title>+<g id="a_node19"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Style.html#t:LineCap" xlink:title="&lt;xLineCap&gt; LineCap| &lt;xLineCapSquare&gt; LineCapSquare| &lt;xLineCapRound&gt; LineCapRound| &lt;xLineCapButt&gt; LineCapButt">+<polygon fill="none" stroke="black" points="1373.88,-856 1373.88,-954 1473.88,-954 1473.88,-856 1373.88,-856"/>+<text text-anchor="middle" x="1423.88" y="-936.7" font-family="Times,serif" font-size="14.00">LineCap</text>+<polyline fill="none" stroke="black" points="1373.88,-929.5 1473.88,-929.5"/>+<text text-anchor="middle" x="1423.88" y="-912.2" font-family="Times,serif" font-size="14.00">LineCapSquare</text>+<polyline fill="none" stroke="black" points="1373.88,-905 1473.88,-905"/>+<text text-anchor="middle" x="1423.88" y="-887.7" font-family="Times,serif" font-size="14.00">LineCapRound</text>+<polyline fill="none" stroke="black" points="1373.88,-880.5 1473.88,-880.5"/>+<text text-anchor="middle" x="1423.88" y="-863.2" font-family="Times,serif" font-size="14.00">LineCapButt</text>+</a>+</g>+</g>+<!-- Style&#45;&gt;LineCap -->+<g id="edge15" class="edge">+<title>Style:xlineCap&#45;&gt;LineCap:xLineCap</title>+<path fill="none" stroke="black" d="M1219.62,-928C1285.88,-928 1303.4,-941.14 1366.61,-941.96"/>+<polygon fill="black" stroke="black" points="1366.35,-943.71 1371.36,-941.99 1366.37,-940.21 1366.35,-943.71"/>+<text text-anchor="middle" x="1308.25" y="-944.2" font-family="Times,serif" font-size="14.00">_Just</text>+</g>+<!-- GlyphShape -->+<g id="node23" class="node">+<title>GlyphShape</title>+<g id="a_node23"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Style.html#t:GlyphShape" xlink:title="&lt;xGlyphShape&gt; GlyphShape| &lt;xVLineGlyph&gt; VLineGlyph| &lt;xTriangleGlyph&gt; TriangleGlyph| &lt;xSquareGlyph&gt; SquareGlyph| &lt;xRectSharpGlyph&gt; RectSharpGlyph| &lt;xRectRoundedGlyph&gt; RectRoundedGlyph| &lt;xPathGlyph&gt; PathGlyph| &lt;xHLineGlyph&gt; HLineGlyph| &lt;xEllipseGlyph&gt; EllipseGlyph| &lt;xCircleGlyph&gt; CircleGlyph">+<polygon fill="none" stroke="black" points="1362.25,-474.5 1362.25,-719.5 1485.5,-719.5 1485.5,-474.5 1362.25,-474.5"/>+<text text-anchor="middle" x="1423.88" y="-702.2" font-family="Times,serif" font-size="14.00">GlyphShape</text>+<polyline fill="none" stroke="black" points="1362.25,-695 1485.5,-695"/>+<text text-anchor="middle" x="1423.88" y="-677.7" font-family="Times,serif" font-size="14.00">VLineGlyph</text>+<polyline fill="none" stroke="black" points="1362.25,-670.5 1485.5,-670.5"/>+<text text-anchor="middle" x="1423.88" y="-653.2" font-family="Times,serif" font-size="14.00">TriangleGlyph</text>+<polyline fill="none" stroke="black" points="1362.25,-646 1485.5,-646"/>+<text text-anchor="middle" x="1423.88" y="-628.7" font-family="Times,serif" font-size="14.00">SquareGlyph</text>+<polyline fill="none" stroke="black" points="1362.25,-621.5 1485.5,-621.5"/>+<text text-anchor="middle" x="1423.88" y="-604.2" font-family="Times,serif" font-size="14.00">RectSharpGlyph</text>+<polyline fill="none" stroke="black" points="1362.25,-597 1485.5,-597"/>+<text text-anchor="middle" x="1423.88" y="-579.7" font-family="Times,serif" font-size="14.00">RectRoundedGlyph</text>+<polyline fill="none" stroke="black" points="1362.25,-572.5 1485.5,-572.5"/>+<text text-anchor="middle" x="1423.88" y="-555.2" font-family="Times,serif" font-size="14.00">PathGlyph</text>+<polyline fill="none" stroke="black" points="1362.25,-548 1485.5,-548"/>+<text text-anchor="middle" x="1423.88" y="-530.7" font-family="Times,serif" font-size="14.00">HLineGlyph</text>+<polyline fill="none" stroke="black" points="1362.25,-523.5 1485.5,-523.5"/>+<text text-anchor="middle" x="1423.88" y="-506.2" font-family="Times,serif" font-size="14.00">EllipseGlyph</text>+<polyline fill="none" stroke="black" points="1362.25,-499 1485.5,-499"/>+<text text-anchor="middle" x="1423.88" y="-481.7" font-family="Times,serif" font-size="14.00">CircleGlyph</text>+</a>+</g>+</g>+<!-- Style&#45;&gt;GlyphShape -->+<g id="edge16" class="edge">+<title>Style:xglyphShape&#45;&gt;GlyphShape:xGlyphShape</title>+<path fill="none" stroke="black" d="M1219.62,-878C1293.22,-878 1216,-768.46 1272.25,-721 1301.5,-696.32 1319.7,-705.79 1355.8,-706.9"/>+<polygon fill="black" stroke="black" points="1355.71,-708.65 1360.74,-706.98 1355.76,-705.15 1355.71,-708.65"/>+</g>+<!-- EscapeText -->+<g id="node27" class="node">+<title>EscapeText</title>+<g id="a_node27"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Style.html#t:EscapeText" xlink:title="&lt;xEscapeText&gt; EscapeText| &lt;xNoEscapeText&gt; NoEscapeText">+<polygon fill="none" stroke="black" points="1376.12,-406.5 1376.12,-455.5 1471.62,-455.5 1471.62,-406.5 1376.12,-406.5"/>+<text text-anchor="middle" x="1423.88" y="-438.2" font-family="Times,serif" font-size="14.00">EscapeText</text>+<polyline fill="none" stroke="black" points="1376.12,-431 1471.62,-431"/>+<text text-anchor="middle" x="1423.88" y="-413.7" font-family="Times,serif" font-size="14.00">NoEscapeText</text>+</a>+</g>+</g>+<!-- Style&#45;&gt;EscapeText -->+<g id="edge18" class="edge">+<title>Style:xescapeText&#45;&gt;EscapeText:xEscapeText</title>+<path fill="none" stroke="black" d="M1219.62,-829C1222.34,-829 1361.08,-467.45 1362.25,-465 1365.91,-457.38 1364.84,-448.81 1368.83,-445.01"/>+<polygon fill="black" stroke="black" points="1369.25,-446.71 1373.44,-443.48 1368.14,-443.39 1369.25,-446.71"/>+</g>+<!-- Colour -->+<g id="node29" class="node">+<title>Colour</title>+<g id="a_node29"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Data-Colour.html#t:Colour" xlink:title="&lt;xColour&gt; Colour| &lt;xopac&#39;&gt; opac&#39;| &lt;xlightness&#39;&gt; lightness&#39;| &lt;xhue&#39;&gt; hue&#39;| &lt;xchroma&#39;&gt; chroma&#39;">+<polygon fill="none" stroke="black" points="1390.75,-264.75 1390.75,-387.25 1457,-387.25 1457,-264.75 1390.75,-264.75"/>+<text text-anchor="middle" x="1423.88" y="-369.95" font-family="Times,serif" font-size="14.00">Colour</text>+<polyline fill="none" stroke="black" points="1390.75,-362.75 1457,-362.75"/>+<text text-anchor="middle" x="1423.88" y="-345.45" font-family="Times,serif" font-size="14.00">opac&#39;</text>+<polyline fill="none" stroke="black" points="1390.75,-338.25 1457,-338.25"/>+<text text-anchor="middle" x="1423.88" y="-320.95" font-family="Times,serif" font-size="14.00">lightness&#39;</text>+<polyline fill="none" stroke="black" points="1390.75,-313.75 1457,-313.75"/>+<text text-anchor="middle" x="1423.88" y="-296.45" font-family="Times,serif" font-size="14.00">hue&#39;</text>+<polyline fill="none" stroke="black" points="1390.75,-289.25 1457,-289.25"/>+<text text-anchor="middle" x="1423.88" y="-271.95" font-family="Times,serif" font-size="14.00">chroma&#39;</text>+</a>+</g>+</g>+<!-- Style&#45;&gt;Colour -->+<g id="edge19" class="edge">+<title>Style:xcolor&#45;&gt;Colour:xColour</title>+<path fill="none" stroke="black" d="M1219.62,-756C1264.56,-756 1243.76,-704.7 1254.25,-661 1269.62,-597 1247.3,-574.91 1272.25,-514 1286.81,-478.46 1343.25,-385.15 1383.55,-375.76"/>+<polygon fill="black" stroke="black" points="1383.62,-377.52 1388.37,-375.18 1383.2,-374.04 1383.62,-377.52"/>+</g>+<!-- Style&#45;&gt;Colour -->+<g id="edge20" class="edge">+<title>Style:xborderColor&#45;&gt;Colour:xColour</title>+<path fill="none" stroke="black" d="M1219.62,-707C1245.21,-707 1245.31,-684.98 1254.25,-661 1274.57,-606.53 1234.13,-443.9 1272.25,-400 1305.86,-361.3 1334.03,-373.83 1383.42,-374.93"/>+<polygon fill="black" stroke="black" points="1383.34,-376.68 1388.36,-374.98 1383.38,-373.18 1383.34,-376.68"/>+</g>+<!-- Style&#45;&gt;Anchor -->+<g id="edge21" class="edge">+<title>Style:xanchor&#45;&gt;Anchor:xAnchor</title>+<path fill="none" stroke="black" d="M1219.62,-682C1264.42,-682 1322.48,-812.44 1368.47,-824.16"/>+<polygon fill="black" stroke="black" points="1368.19,-825.89 1373.37,-824.8 1368.64,-822.42 1368.19,-825.89"/>+</g>+<!-- ShapeRendering -->+<g id="node8" class="node">+<title>ShapeRendering</title>+<g id="a_node8"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Markup.html#t:ShapeRendering" xlink:title="&lt;xShapeRendering&gt; ShapeRendering| &lt;xUseGeometricPrecision&gt; UseGeometricPrecision| &lt;xUseCssCrisp&gt; UseCssCrisp| &lt;xNoShapeRendering&gt; NoShapeRendering">+<polygon fill="none" stroke="black" points="601.75,-1615 601.75,-1713 746.75,-1713 746.75,-1615 601.75,-1615"/>+<text text-anchor="middle" x="674.25" y="-1695.7" font-family="Times,serif" font-size="14.00">ShapeRendering</text>+<polyline fill="none" stroke="black" points="601.75,-1688.5 746.75,-1688.5"/>+<text text-anchor="middle" x="674.25" y="-1671.2" font-family="Times,serif" font-size="14.00">UseGeometricPrecision</text>+<polyline fill="none" stroke="black" points="601.75,-1664 746.75,-1664"/>+<text text-anchor="middle" x="674.25" y="-1646.7" font-family="Times,serif" font-size="14.00">UseCssCrisp</text>+<polyline fill="none" stroke="black" points="601.75,-1639.5 746.75,-1639.5"/>+<text text-anchor="middle" x="674.25" y="-1622.2" font-family="Times,serif" font-size="14.00">NoShapeRendering</text>+</a>+</g>+</g>+<!-- RenderStyle -->+<g id="node10" class="node">+<title>RenderStyle</title>+<g id="a_node10"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Markup.html#t:RenderStyle" xlink:title="&lt;xRenderStyle&gt; RenderStyle| &lt;xIndented&gt; Indented| &lt;xCompact&gt; Compact">+<polygon fill="none" stroke="black" points="387.38,-1710.25 387.38,-1783.75 470.12,-1783.75 470.12,-1710.25 387.38,-1710.25"/>+<text text-anchor="middle" x="428.75" y="-1766.45" font-family="Times,serif" font-size="14.00">RenderStyle</text>+<polyline fill="none" stroke="black" points="387.38,-1759.25 470.12,-1759.25"/>+<text text-anchor="middle" x="428.75" y="-1741.95" font-family="Times,serif" font-size="14.00">Indented</text>+<polyline fill="none" stroke="black" points="387.38,-1734.75 470.12,-1734.75"/>+<text text-anchor="middle" x="428.75" y="-1717.45" font-family="Times,serif" font-size="14.00">Compact</text>+</a>+</g>+</g>+<!-- Rect -->+<g id="node11" class="node">+<title>Rect</title>+<g id="a_node11"><a xlink:href="https://hackage.haskell.org/package/numhask-space/docs/NumHask-Space-Rect.html#t:Rect" xlink:title="&lt;xRect&gt; Rect">+<polygon fill="none" stroke="black" points="1396.88,-1582 1396.88,-1618 1450.88,-1618 1450.88,-1582 1396.88,-1582"/>+<text text-anchor="middle" x="1423.88" y="-1595.2" font-family="Times,serif" font-size="14.00">Rect</text>+</a>+</g>+</g>+<!-- Priority -->+<g id="node12" class="node">+<title>Priority</title>+<g id="a_node12"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Hud.html#t:Priority" xlink:title="&lt;xPriority&gt; Priority">+<polygon fill="none" stroke="black" points="400.12,-1051 400.12,-1087 457.38,-1087 457.38,-1051 400.12,-1051"/>+<text text-anchor="middle" x="428.75" y="-1064.2" font-family="Times,serif" font-size="14.00">Priority</text>+</a>+</g>+</g>+<!-- PreferColorScheme -->+<g id="node13" class="node">+<title>PreferColorScheme</title>+<g id="a_node13"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Primitive.html#t:PreferColorScheme" xlink:title="&lt;xPreferColorScheme&gt; PreferColorScheme| &lt;xPreferNormal&gt; PreferNormal| &lt;xPreferLight&gt; PreferLight| &lt;xPreferHud&gt; PreferHud| &lt;xPreferDark&gt; PreferDark">+<polygon fill="none" stroke="black" points="612.62,-1473.75 612.62,-1596.25 735.88,-1596.25 735.88,-1473.75 612.62,-1473.75"/>+<text text-anchor="middle" x="674.25" y="-1578.95" font-family="Times,serif" font-size="14.00">PreferColorScheme</text>+<polyline fill="none" stroke="black" points="612.62,-1571.75 735.88,-1571.75"/>+<text text-anchor="middle" x="674.25" y="-1554.45" font-family="Times,serif" font-size="14.00">PreferNormal</text>+<polyline fill="none" stroke="black" points="612.62,-1547.25 735.88,-1547.25"/>+<text text-anchor="middle" x="674.25" y="-1529.95" font-family="Times,serif" font-size="14.00">PreferLight</text>+<polyline fill="none" stroke="black" points="612.62,-1522.75 735.88,-1522.75"/>+<text text-anchor="middle" x="674.25" y="-1505.45" font-family="Times,serif" font-size="14.00">PreferHud</text>+<polyline fill="none" stroke="black" points="612.62,-1498.25 735.88,-1498.25"/>+<text text-anchor="middle" x="674.25" y="-1480.95" font-family="Times,serif" font-size="14.00">PreferDark</text>+</a>+</g>+</g>+<!-- PathData -->+<g id="node16" class="node">+<title>PathData</title>+<g id="a_node16"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Data-Path.html#t:PathData" xlink:title="&lt;xPathData&gt; PathData| &lt;xStartP&gt; StartP| &lt;xQuadP&gt; QuadP| &lt;xLineP&gt; LineP| &lt;xCubicP&gt; CubicP| &lt;xArcP&gt; ArcP">+<polygon fill="none" stroke="black" points="1391.12,-1415.5 1391.12,-1562.5 1456.62,-1562.5 1456.62,-1415.5 1391.12,-1415.5"/>+<text text-anchor="middle" x="1423.88" y="-1545.2" font-family="Times,serif" font-size="14.00">PathData</text>+<polyline fill="none" stroke="black" points="1391.12,-1538 1456.62,-1538"/>+<text text-anchor="middle" x="1423.88" y="-1520.7" font-family="Times,serif" font-size="14.00">StartP</text>+<polyline fill="none" stroke="black" points="1391.12,-1513.5 1456.62,-1513.5"/>+<text text-anchor="middle" x="1423.88" y="-1496.2" font-family="Times,serif" font-size="14.00">QuadP</text>+<polyline fill="none" stroke="black" points="1391.12,-1489 1456.62,-1489"/>+<text text-anchor="middle" x="1423.88" y="-1471.7" font-family="Times,serif" font-size="14.00">LineP</text>+<polyline fill="none" stroke="black" points="1391.12,-1464.5 1456.62,-1464.5"/>+<text text-anchor="middle" x="1423.88" y="-1447.2" font-family="Times,serif" font-size="14.00">CubicP</text>+<polyline fill="none" stroke="black" points="1391.12,-1440 1456.62,-1440"/>+<text text-anchor="middle" x="1423.88" y="-1422.7" font-family="Times,serif" font-size="14.00">ArcP</text>+</a>+</g>+</g>+<!-- ArcInfo -->+<g id="node37" class="node">+<title>ArcInfo</title>+<g id="a_node37"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Data-Path.html#t:ArcInfo" xlink:title="&lt;xArcInfo&gt; ArcInfo| &lt;xradii&gt; radii| &lt;xphi&gt; phi| &lt;xlarge&gt; large| &lt;xclockwise&gt; clockwise">+<polygon fill="none" stroke="black" points="1610,-1357.75 1610,-1480.25 1680,-1480.25 1680,-1357.75 1610,-1357.75"/>+<text text-anchor="middle" x="1645" y="-1462.95" font-family="Times,serif" font-size="14.00">ArcInfo</text>+<polyline fill="none" stroke="black" points="1610,-1455.75 1680,-1455.75"/>+<text text-anchor="middle" x="1645" y="-1438.45" font-family="Times,serif" font-size="14.00">radii</text>+<polyline fill="none" stroke="black" points="1610,-1431.25 1680,-1431.25"/>+<text text-anchor="middle" x="1645" y="-1413.95" font-family="Times,serif" font-size="14.00">phi</text>+<polyline fill="none" stroke="black" points="1610,-1406.75 1680,-1406.75"/>+<text text-anchor="middle" x="1645" y="-1389.45" font-family="Times,serif" font-size="14.00">large</text>+<polyline fill="none" stroke="black" points="1610,-1382.25 1680,-1382.25"/>+<text text-anchor="middle" x="1645" y="-1364.95" font-family="Times,serif" font-size="14.00">clockwise</text>+</a>+</g>+</g>+<!-- PathData&#45;&gt;ArcInfo -->+<g id="edge22" class="edge">+<title>PathData:xArcP&#45;&gt;ArcInfo:xArcInfo</title>+<path fill="none" stroke="black" d="M1457.88,-1428C1525.6,-1428 1539.27,-1465.54 1603.61,-1467.89"/>+<polygon fill="black" stroke="black" points="1603.46,-1469.63 1608.49,-1467.97 1603.52,-1466.13 1603.46,-1469.63"/>+<text text-anchor="middle" x="1547.75" y="-1469.2" font-family="Times,serif" font-size="14.00">(ArcP arcinfo _)</text>+</g>+<!-- MarkupOptions -->+<g id="node17" class="node">+<title>MarkupOptions</title>+<g id="a_node17"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Markup.html#t:MarkupOptions" xlink:title="&lt;xMarkupOptions&gt; MarkupOptions| &lt;xrenderStyle&gt; renderStyle| &lt;xmarkupHeight&gt; markupHeight| &lt;xcssOptions&gt; cssOptions| &lt;xchartAspect&gt; chartAspect">+<polygon fill="none" stroke="black" points="137.75,-1554.75 137.75,-1677.25 240,-1677.25 240,-1554.75 137.75,-1554.75"/>+<text text-anchor="middle" x="188.88" y="-1659.95" font-family="Times,serif" font-size="14.00">MarkupOptions</text>+<polyline fill="none" stroke="black" points="137.75,-1652.75 240,-1652.75"/>+<text text-anchor="middle" x="188.88" y="-1635.45" font-family="Times,serif" font-size="14.00">renderStyle</text>+<polyline fill="none" stroke="black" points="137.75,-1628.25 240,-1628.25"/>+<text text-anchor="middle" x="188.88" y="-1610.95" font-family="Times,serif" font-size="14.00">markupHeight</text>+<polyline fill="none" stroke="black" points="137.75,-1603.75 240,-1603.75"/>+<text text-anchor="middle" x="188.88" y="-1586.45" font-family="Times,serif" font-size="14.00">cssOptions</text>+<polyline fill="none" stroke="black" points="137.75,-1579.25 240,-1579.25"/>+<text text-anchor="middle" x="188.88" y="-1561.95" font-family="Times,serif" font-size="14.00">chartAspect</text>+</a>+</g>+</g>+<!-- MarkupOptions&#45;&gt;RenderStyle -->+<g id="edge23" class="edge">+<title>MarkupOptions:xrenderStyle&#45;&gt;RenderStyle:xRenderStyle</title>+<path fill="none" stroke="black" d="M240,-1641C260.23,-1641 350.05,-1753.28 380.61,-1769.94"/>+<polygon fill="black" stroke="black" points="380.02,-1771.59 385.31,-1771.52 381.13,-1768.27 380.02,-1771.59"/>+</g>+<!-- CssOptions -->+<g id="node28" class="node">+<title>CssOptions</title>+<g id="a_node28"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Markup.html#t:CssOptions" xlink:title="&lt;xCssOptions&gt; CssOptions| &lt;xshapeRendering&gt; shapeRendering| &lt;xpreferColorScheme&gt; preferColorScheme| &lt;xfontFamilies&gt; fontFamilies| &lt;xcssExtra&gt; cssExtra">+<polygon fill="none" stroke="black" points="367.5,-1568.75 367.5,-1691.25 490,-1691.25 490,-1568.75 367.5,-1568.75"/>+<text text-anchor="middle" x="428.75" y="-1673.95" font-family="Times,serif" font-size="14.00">CssOptions</text>+<polyline fill="none" stroke="black" points="367.5,-1666.75 490,-1666.75"/>+<text text-anchor="middle" x="428.75" y="-1649.45" font-family="Times,serif" font-size="14.00">shapeRendering</text>+<polyline fill="none" stroke="black" points="367.5,-1642.25 490,-1642.25"/>+<text text-anchor="middle" x="428.75" y="-1624.95" font-family="Times,serif" font-size="14.00">preferColorScheme</text>+<polyline fill="none" stroke="black" points="367.5,-1617.75 490,-1617.75"/>+<text text-anchor="middle" x="428.75" y="-1600.45" font-family="Times,serif" font-size="14.00">fontFamilies</text>+<polyline fill="none" stroke="black" points="367.5,-1593.25 490,-1593.25"/>+<text text-anchor="middle" x="428.75" y="-1575.95" font-family="Times,serif" font-size="14.00">cssExtra</text>+</a>+</g>+</g>+<!-- MarkupOptions&#45;&gt;CssOptions -->+<g id="edge24" class="edge">+<title>MarkupOptions:xcssOptions&#45;&gt;CssOptions:xCssOptions</title>+<path fill="none" stroke="black" d="M240,-1591C306.7,-1591 299.21,-1673.59 361.27,-1678.75"/>+<polygon fill="black" stroke="black" points="360.92,-1680.48 365.99,-1678.94 361.06,-1676.99 360.92,-1680.48"/>+</g>+<!-- ChartAspect -->+<g id="node33" class="node">+<title>ChartAspect</title>+<g id="a_node33"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Primitive.html#t:ChartAspect" xlink:title="&lt;xChartAspect&gt; ChartAspect| &lt;xUnscaledAspect&gt; UnscaledAspect| &lt;xFixedAspect&gt; FixedAspect| &lt;xCanvasAspect&gt; CanvasAspect">+<polygon fill="none" stroke="black" points="376.88,-1452 376.88,-1550 480.62,-1550 480.62,-1452 376.88,-1452"/>+<text text-anchor="middle" x="428.75" y="-1532.7" font-family="Times,serif" font-size="14.00">ChartAspect</text>+<polyline fill="none" stroke="black" points="376.88,-1525.5 480.62,-1525.5"/>+<text text-anchor="middle" x="428.75" y="-1508.2" font-family="Times,serif" font-size="14.00">UnscaledAspect</text>+<polyline fill="none" stroke="black" points="376.88,-1501 480.62,-1501"/>+<text text-anchor="middle" x="428.75" y="-1483.7" font-family="Times,serif" font-size="14.00">FixedAspect</text>+<polyline fill="none" stroke="black" points="376.88,-1476.5 480.62,-1476.5"/>+<text text-anchor="middle" x="428.75" y="-1459.2" font-family="Times,serif" font-size="14.00">CanvasAspect</text>+</a>+</g>+</g>+<!-- MarkupOptions&#45;&gt;ChartAspect -->+<g id="edge25" class="edge">+<title>MarkupOptions:xchartAspect&#45;&gt;ChartAspect:xChartAspect</title>+<path fill="none" stroke="black" d="M240,-1567C299.53,-1567 313.13,-1540 369.42,-1538.11"/>+<polygon fill="black" stroke="black" points="369.27,-1539.86 374.24,-1538.03 369.21,-1536.36 369.27,-1539.86"/>+</g>+<!-- LegendOptions -->+<g id="node20" class="node">+<title>LegendOptions</title>+<g id="a_node20"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Hud.html#t:LegendOptions" xlink:title="&lt;xLegendOptions&gt; LegendOptions| &lt;xvgap&gt; vgap| &lt;xtextStyle&gt; textStyle| &lt;xscaleP&gt; scaleP| &lt;xscaleChartsBy&gt; scaleChartsBy| &lt;xplace&gt; place| &lt;xouterPad&gt; outerPad| &lt;xlegendSize&gt; legendSize| &lt;xlegendCharts&gt; legendCharts| &lt;xinnerPad&gt; innerPad| &lt;xhgap&gt; hgap| &lt;xframe&gt; frame| &lt;xbuffer&gt; buffer">+<polygon fill="none" stroke="black" points="624.62,-854.75 624.62,-1173.25 723.88,-1173.25 723.88,-854.75 624.62,-854.75"/>+<text text-anchor="middle" x="674.25" y="-1155.95" font-family="Times,serif" font-size="14.00">LegendOptions</text>+<polyline fill="none" stroke="black" points="624.62,-1148.75 723.88,-1148.75"/>+<text text-anchor="middle" x="674.25" y="-1131.45" font-family="Times,serif" font-size="14.00">vgap</text>+<polyline fill="none" stroke="black" points="624.62,-1124.25 723.88,-1124.25"/>+<text text-anchor="middle" x="674.25" y="-1106.95" font-family="Times,serif" font-size="14.00">textStyle</text>+<polyline fill="none" stroke="black" points="624.62,-1099.75 723.88,-1099.75"/>+<text text-anchor="middle" x="674.25" y="-1082.45" font-family="Times,serif" font-size="14.00">scaleP</text>+<polyline fill="none" stroke="black" points="624.62,-1075.25 723.88,-1075.25"/>+<text text-anchor="middle" x="674.25" y="-1057.95" font-family="Times,serif" font-size="14.00">scaleChartsBy</text>+<polyline fill="none" stroke="black" points="624.62,-1050.75 723.88,-1050.75"/>+<text text-anchor="middle" x="674.25" y="-1033.45" font-family="Times,serif" font-size="14.00">place</text>+<polyline fill="none" stroke="black" points="624.62,-1026.25 723.88,-1026.25"/>+<text text-anchor="middle" x="674.25" y="-1008.95" font-family="Times,serif" font-size="14.00">outerPad</text>+<polyline fill="none" stroke="black" points="624.62,-1001.75 723.88,-1001.75"/>+<text text-anchor="middle" x="674.25" y="-984.45" font-family="Times,serif" font-size="14.00">legendSize</text>+<polyline fill="none" stroke="black" points="624.62,-977.25 723.88,-977.25"/>+<text text-anchor="middle" x="674.25" y="-959.95" font-family="Times,serif" font-size="14.00">legendCharts</text>+<polyline fill="none" stroke="black" points="624.62,-952.75 723.88,-952.75"/>+<text text-anchor="middle" x="674.25" y="-935.45" font-family="Times,serif" font-size="14.00">innerPad</text>+<polyline fill="none" stroke="black" points="624.62,-928.25 723.88,-928.25"/>+<text text-anchor="middle" x="674.25" y="-910.95" font-family="Times,serif" font-size="14.00">hgap</text>+<polyline fill="none" stroke="black" points="624.62,-903.75 723.88,-903.75"/>+<text text-anchor="middle" x="674.25" y="-886.45" font-family="Times,serif" font-size="14.00">frame</text>+<polyline fill="none" stroke="black" points="624.62,-879.25 723.88,-879.25"/>+<text text-anchor="middle" x="674.25" y="-861.95" font-family="Times,serif" font-size="14.00">buffer</text>+</a>+</g>+</g>+<!-- LegendOptions&#45;&gt;Style -->+<g id="edge26" class="edge">+<title>LegendOptions:xtextStyle&#45;&gt;Style:xStyle</title>+<path fill="none" stroke="black" d="M725.25,-1112C905.58,-1112 952.07,-1123.72 1129.27,-1124"/>+<polygon fill="black" stroke="black" points="1129.11,-1125.74 1134.11,-1124 1129.11,-1122.24 1129.11,-1125.74"/>+</g>+<!-- LegendOptions&#45;&gt;Style -->+<g id="edge30" class="edge">+<title>LegendOptions:xframe&#45;&gt;Style:xStyle</title>+<path fill="none" stroke="black" d="M725.25,-891C837.92,-891 879.42,-840.32 978.75,-893.5 1086.08,-950.96 1014.33,-1117.99 1129.27,-1123.84"/>+<polygon fill="black" stroke="black" points="1129.07,-1125.59 1134.11,-1123.96 1129.16,-1122.09 1129.07,-1125.59"/>+<text text-anchor="middle" x="931.75" y="-896.2" font-family="Times,serif" font-size="14.00">_Just</text>+</g>+<!-- LegendOptions&#45;&gt;ScaleP -->+<g id="edge27" class="edge">+<title>LegendOptions:xscaleP&#45;&gt;ScaleP:xScaleP</title>+<path fill="none" stroke="black" d="M725.25,-1088C749.92,-1088 746.6,-1110.29 764.75,-1127 816.46,-1174.61 823,-1196.43 884.75,-1230 930.34,-1254.78 945.39,-1255.59 996.75,-1263 1149.61,-1285.05 1206.04,-1331.92 1344.25,-1263 1360.95,-1254.67 1354,-1231.43 1366.68,-1226.1"/>+<polygon fill="black" stroke="black" points="1366.77,-1227.86 1371.38,-1225.26 1366.16,-1224.42 1366.77,-1227.86"/>+</g>+<!-- LegendOptions&#45;&gt;Place -->+<g id="edge28" class="edge">+<title>LegendOptions:xplace&#45;&gt;Place:xPlace</title>+<path fill="none" stroke="black" d="M725.25,-1039C788.16,-1039 806.43,-1025.11 866.75,-1043 873.21,-1044.92 874.84,-1049.76 878.73,-1052.33"/>+<polygon fill="black" stroke="black" points="878.01,-1053.95 883.29,-1053.6 878.94,-1050.58 878.01,-1053.95"/>+</g>+<!-- Chart -->+<g id="node34" class="node">+<title>Chart</title>+<g id="a_node34"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Primitive.html#t:Chart" xlink:title="&lt;xChart&gt; Chart| &lt;xchartStyle&gt; chartStyle| &lt;xchartData&gt; chartData">+<polygon fill="none" stroke="black" points="896.38,-1147.25 896.38,-1220.75 967.12,-1220.75 967.12,-1147.25 896.38,-1147.25"/>+<text text-anchor="middle" x="931.75" y="-1203.45" font-family="Times,serif" font-size="14.00">Chart</text>+<polyline fill="none" stroke="black" points="896.38,-1196.25 967.12,-1196.25"/>+<text text-anchor="middle" x="931.75" y="-1178.95" font-family="Times,serif" font-size="14.00">chartStyle</text>+<polyline fill="none" stroke="black" points="896.38,-1171.75 967.12,-1171.75"/>+<text text-anchor="middle" x="931.75" y="-1154.45" font-family="Times,serif" font-size="14.00">chartData</text>+</a>+</g>+</g>+<!-- LegendOptions&#45;&gt;Chart -->+<g id="edge29" class="edge">+<title>LegendOptions:xlegendCharts&#45;&gt;Chart:xChart</title>+<path fill="none" stroke="black" d="M725.25,-965C767.72,-965 742.16,-1016.04 764.75,-1052 811.9,-1127.08 805.24,-1205.09 889.27,-1208.86"/>+<polygon fill="black" stroke="black" points="889.2,-1210.61 894.24,-1208.97 889.28,-1207.11 889.2,-1210.61"/>+<text text-anchor="middle" x="815.75" y="-1207.2" font-family="Times,serif" font-size="14.00">each % _2 % each</text>+</g>+<!-- HudOptions -->+<g id="node21" class="node">+<title>HudOptions</title>+<g id="a_node21"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Hud.html#t:HudOptions" xlink:title="&lt;xHudOptions&gt; HudOptions| &lt;xtitles&gt; titles| &lt;xlegends&gt; legends| &lt;xframes&gt; frames| &lt;xaxes&gt; axes">+<polygon fill="none" stroke="black" points="147.88,-1027.75 147.88,-1150.25 229.88,-1150.25 229.88,-1027.75 147.88,-1027.75"/>+<text text-anchor="middle" x="188.88" y="-1132.95" font-family="Times,serif" font-size="14.00">HudOptions</text>+<polyline fill="none" stroke="black" points="147.88,-1125.75 229.88,-1125.75"/>+<text text-anchor="middle" x="188.88" y="-1108.45" font-family="Times,serif" font-size="14.00">titles</text>+<polyline fill="none" stroke="black" points="147.88,-1101.25 229.88,-1101.25"/>+<text text-anchor="middle" x="188.88" y="-1083.95" font-family="Times,serif" font-size="14.00">legends</text>+<polyline fill="none" stroke="black" points="147.88,-1076.75 229.88,-1076.75"/>+<text text-anchor="middle" x="188.88" y="-1059.45" font-family="Times,serif" font-size="14.00">frames</text>+<polyline fill="none" stroke="black" points="147.88,-1052.25 229.88,-1052.25"/>+<text text-anchor="middle" x="188.88" y="-1034.95" font-family="Times,serif" font-size="14.00">axes</text>+</a>+</g>+</g>+<!-- HudOptions&#45;&gt;TitleOptions -->+<g id="edge31" class="edge">+<title>HudOptions:xtitles&#45;&gt;TitleOptions:xTitleOptions</title>+<path fill="none" stroke="black" d="M230.88,-1114C258.13,-1114 238.18,-1150.29 258,-1169 387.47,-1291.2 449.65,-1326.18 624.97,-1326.99"/>+<polygon fill="black" stroke="black" points="624.73,-1328.74 629.74,-1327 624.74,-1325.24 624.73,-1328.74"/>+<text text-anchor="middle" x="428.75" y="-1317.2" font-family="Times,serif" font-size="14.00">each % #item</text>+</g>+<!-- HudOptions&#45;&gt;Priority -->+<g id="edge32" class="edge">+<title>HudOptions:xtitles&#45;&gt;Priority:xPriority</title>+<path fill="none" stroke="black" d="M230.88,-1114C283.69,-1114 298.37,-1120.22 349.5,-1107 364.75,-1103.06 380.59,-1096.11 394.07,-1089.23"/>+<polygon fill="black" stroke="black" points="394.72,-1090.86 398.35,-1086.99 393.1,-1087.76 394.72,-1090.86"/>+<text text-anchor="middle" x="303.75" y="-1118.2" font-family="Times,serif" font-size="14.00">each % #priority</text>+</g>+<!-- HudOptions&#45;&gt;Priority -->+<g id="edge33" class="edge">+<title>HudOptions:xlegends&#45;&gt;Priority:xPriority</title>+<path fill="none" stroke="black" d="M230.88,-1089C234.9,-1089 337.88,-1078.41 393.64,-1072.64"/>+<polygon fill="black" stroke="black" points="393.57,-1074.41 398.37,-1072.15 393.21,-1070.92 393.57,-1074.41"/>+<text text-anchor="middle" x="303.75" y="-1089.2" font-family="Times,serif" font-size="14.00">each % #priority</text>+</g>+<!-- HudOptions&#45;&gt;Priority -->+<g id="edge35" class="edge">+<title>HudOptions:xframes&#45;&gt;Priority:xPriority</title>+<path fill="none" stroke="black" d="M230.88,-1064C243.38,-1064 245.61,-1058.18 258,-1056.5 298.3,-1051.03 308.96,-1053.32 349.5,-1056.5 364.07,-1057.64 380.01,-1059.95 393.75,-1062.27"/>+<polygon fill="black" stroke="black" points="393.18,-1063.95 398.4,-1063.08 393.78,-1060.5 393.18,-1063.95"/>+<text text-anchor="middle" x="303.75" y="-1059.2" font-family="Times,serif" font-size="14.00">each % #priority</text>+</g>+<!-- HudOptions&#45;&gt;Priority -->+<g id="edge37" class="edge">+<title>HudOptions:xaxes&#45;&gt;Priority:xPriority</title>+<path fill="none" stroke="black" d="M230.88,-1040C243.38,-1040 245.61,-1034.18 258,-1032.5 298.3,-1027.03 309.78,-1023.79 349.5,-1032.5 364.78,-1035.85 380.62,-1042.43 394.09,-1049.1"/>+<polygon fill="black" stroke="black" points="393.11,-1050.56 398.36,-1051.27 394.7,-1047.44 393.11,-1050.56"/>+<text text-anchor="middle" x="303.75" y="-1035.2" font-family="Times,serif" font-size="14.00">each % #priority</text>+</g>+<!-- HudOptions&#45;&gt;LegendOptions -->+<g id="edge34" class="edge">+<title>HudOptions:xlegends&#45;&gt;LegendOptions:xLegendOptions</title>+<path fill="none" stroke="black" d="M230.88,-1089C254.99,-1089 237.54,-1123.23 258,-1136 394.29,-1221.04 458.89,-1162.53 617.1,-1161.03"/>+<polygon fill="black" stroke="black" points="616.74,-1162.78 621.74,-1161.01 616.73,-1159.28 616.74,-1162.78"/>+<text text-anchor="middle" x="428.75" y="-1185.2" font-family="Times,serif" font-size="14.00">each % #item</text>+</g>+<!-- FrameOptions -->+<g id="node24" class="node">+<title>FrameOptions</title>+<g id="a_node24"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Hud.html#t:FrameOptions" xlink:title="&lt;xFrameOptions&gt; FrameOptions| &lt;xframe&gt; frame| &lt;xbuffer&gt; buffer| &lt;xanchorTo&gt; anchorTo">+<polygon fill="none" stroke="black" points="884.75,-226 884.75,-324 978.75,-324 978.75,-226 884.75,-226"/>+<text text-anchor="middle" x="931.75" y="-306.7" font-family="Times,serif" font-size="14.00">FrameOptions</text>+<polyline fill="none" stroke="black" points="884.75,-299.5 978.75,-299.5"/>+<text text-anchor="middle" x="931.75" y="-282.2" font-family="Times,serif" font-size="14.00">frame</text>+<polyline fill="none" stroke="black" points="884.75,-275 978.75,-275"/>+<text text-anchor="middle" x="931.75" y="-257.7" font-family="Times,serif" font-size="14.00">buffer</text>+<polyline fill="none" stroke="black" points="884.75,-250.5 978.75,-250.5"/>+<text text-anchor="middle" x="931.75" y="-233.2" font-family="Times,serif" font-size="14.00">anchorTo</text>+</a>+</g>+</g>+<!-- HudOptions&#45;&gt;FrameOptions -->+<g id="edge36" class="edge">+<title>HudOptions:xframes&#45;&gt;FrameOptions:xFrameOptions</title>+<path fill="none" stroke="black" d="M230.88,-1064C262.2,-1064 348.15,-541.63 367.5,-517 518.95,-324.27 635.4,-312.2 878.26,-312"/>+<polygon fill="black" stroke="black" points="878.24,-313.75 883.24,-312 878.24,-310.25 878.24,-313.75"/>+<text text-anchor="middle" x="545.88" y="-384.2" font-family="Times,serif" font-size="14.00">each % #item</text>+</g>+<!-- AxisOptions -->+<g id="node35" class="node">+<title>AxisOptions</title>+<g id="a_node35"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Hud.html#t:AxisOptions" xlink:title="&lt;xAxisOptions&gt; AxisOptions| &lt;xticks&gt; ticks| &lt;xplace&gt; place| &lt;xaxisBar&gt; axisBar| &lt;xadjustments&gt; adjustments">+<polygon fill="none" stroke="black" points="386.62,-526.75 386.62,-649.25 470.88,-649.25 470.88,-526.75 386.62,-526.75"/>+<text text-anchor="middle" x="428.75" y="-631.95" font-family="Times,serif" font-size="14.00">AxisOptions</text>+<polyline fill="none" stroke="black" points="386.62,-624.75 470.88,-624.75"/>+<text text-anchor="middle" x="428.75" y="-607.45" font-family="Times,serif" font-size="14.00">ticks</text>+<polyline fill="none" stroke="black" points="386.62,-600.25 470.88,-600.25"/>+<text text-anchor="middle" x="428.75" y="-582.95" font-family="Times,serif" font-size="14.00">place</text>+<polyline fill="none" stroke="black" points="386.62,-575.75 470.88,-575.75"/>+<text text-anchor="middle" x="428.75" y="-558.45" font-family="Times,serif" font-size="14.00">axisBar</text>+<polyline fill="none" stroke="black" points="386.62,-551.25 470.88,-551.25"/>+<text text-anchor="middle" x="428.75" y="-533.95" font-family="Times,serif" font-size="14.00">adjustments</text>+</a>+</g>+</g>+<!-- HudOptions&#45;&gt;AxisOptions -->+<g id="edge38" class="edge">+<title>HudOptions:xaxes&#45;&gt;AxisOptions:xAxisOptions</title>+<path fill="none" stroke="black" d="M188.88,-1027C188.88,-835.01 191.52,-641.4 379.28,-637.07"/>+<polygon fill="black" stroke="black" points="379.26,-638.82 384.24,-637.02 379.22,-635.32 379.26,-638.82"/>+<text text-anchor="middle" x="303.75" y="-682.2" font-family="Times,serif" font-size="14.00">each % #item</text>+</g>+<!-- FrameOptions&#45;&gt;Style -->+<g id="edge39" class="edge">+<title>FrameOptions:xframe&#45;&gt;Style:xStyle</title>+<path fill="none" stroke="black" d="M978.75,-287C990.81,-287 1079.54,-465.94 1083,-477.5 1103.07,-544.52 1065.85,-1090.6 1129.58,-1122.54"/>+<polygon fill="black" stroke="black" points="1128.88,-1124.17 1134.15,-1123.65 1129.7,-1120.77 1128.88,-1124.17"/>+<text text-anchor="middle" x="1039.88" y="-480.2" font-family="Times,serif" font-size="14.00">#frame % _Just</text>+</g>+<!-- FrameOptions&#45;&gt;HudChartSection -->+<g id="edge40" class="edge">+<title>FrameOptions:xanchorTo&#45;&gt;HudChartSection:xHudChartSection</title>+<path fill="none" stroke="black" d="M978.75,-238C1016.71,-238 1069,-344.32 1108.41,-355.12"/>+<polygon fill="black" stroke="black" points="1107.93,-356.82 1113.13,-355.79 1108.42,-353.35 1107.93,-356.82"/>+</g>+<!-- FStyle -->+<g id="node26" class="node">+<title>FStyle</title>+<g id="a_node26"><a xlink:href="https://hackage.haskell.org/package/formatn/docs/Data-FormatN.html#t:FStyle" xlink:title="&lt;xFStyle&gt; FStyle| &lt;xFSPrec&gt; FSPrec| &lt;xFSPercent&gt; FSPercent| &lt;xFSNone&gt; FSNone| &lt;xFSFixed Int&gt; FSFixed Int| &lt;xFSExponent&gt; FSExponent| &lt;xFSDollar&gt; FSDollar| &lt;xFSDecimal&gt; FSDecimal| &lt;xFSCommaPrec&gt; FSCommaPrec| &lt;xFSComma&gt; FSComma">+<polygon fill="none" stroke="black" points="1374.25,-0.5 1374.25,-245.5 1473.5,-245.5 1473.5,-0.5 1374.25,-0.5"/>+<text text-anchor="middle" x="1423.88" y="-228.2" font-family="Times,serif" font-size="14.00">FStyle</text>+<polyline fill="none" stroke="black" points="1374.25,-221 1473.5,-221"/>+<text text-anchor="middle" x="1423.88" y="-203.7" font-family="Times,serif" font-size="14.00">FSPrec</text>+<polyline fill="none" stroke="black" points="1374.25,-196.5 1473.5,-196.5"/>+<text text-anchor="middle" x="1423.88" y="-179.2" font-family="Times,serif" font-size="14.00">FSPercent</text>+<polyline fill="none" stroke="black" points="1374.25,-172 1473.5,-172"/>+<text text-anchor="middle" x="1423.88" y="-154.7" font-family="Times,serif" font-size="14.00">FSNone</text>+<polyline fill="none" stroke="black" points="1374.25,-147.5 1473.5,-147.5"/>+<text text-anchor="middle" x="1423.88" y="-130.2" font-family="Times,serif" font-size="14.00">FSFixed Int</text>+<polyline fill="none" stroke="black" points="1374.25,-123 1473.5,-123"/>+<text text-anchor="middle" x="1423.88" y="-105.7" font-family="Times,serif" font-size="14.00">FSExponent</text>+<polyline fill="none" stroke="black" points="1374.25,-98.5 1473.5,-98.5"/>+<text text-anchor="middle" x="1423.88" y="-81.2" font-family="Times,serif" font-size="14.00">FSDollar</text>+<polyline fill="none" stroke="black" points="1374.25,-74 1473.5,-74"/>+<text text-anchor="middle" x="1423.88" y="-56.7" font-family="Times,serif" font-size="14.00">FSDecimal</text>+<polyline fill="none" stroke="black" points="1374.25,-49.5 1473.5,-49.5"/>+<text text-anchor="middle" x="1423.88" y="-32.2" font-family="Times,serif" font-size="14.00">FSCommaPrec</text>+<polyline fill="none" stroke="black" points="1374.25,-25 1473.5,-25"/>+<text text-anchor="middle" x="1423.88" y="-7.7" font-family="Times,serif" font-size="14.00">FSComma</text>+</a>+</g>+</g>+<!-- FormatN&#45;&gt;FStyle -->+<g id="edge41" class="edge">+<title>FormatN:xfstyle&#45;&gt;FStyle:xFStyle</title>+<path fill="none" stroke="black" d="M1254.25,-476C1279.24,-476 1262.38,-387.96 1272.25,-365 1300.53,-299.21 1299.21,-236.77 1366.58,-233.16"/>+<polygon fill="black" stroke="black" points="1366.41,-234.92 1371.36,-233.04 1366.32,-231.42 1366.41,-234.92"/>+</g>+<!-- CssOptions&#45;&gt;ShapeRendering -->+<g id="edge42" class="edge">+<title>CssOptions:xshapeRendering&#45;&gt;ShapeRendering:xShapeRendering</title>+<path fill="none" stroke="black" d="M490,-1655C541.51,-1655 547.6,-1697.3 595.38,-1700.77"/>+<polygon fill="black" stroke="black" points="595.18,-1702.52 600.24,-1700.95 595.3,-1699.02 595.18,-1702.52"/>+</g>+<!-- CssOptions&#45;&gt;PreferColorScheme -->+<g id="edge43" class="edge">+<title>CssOptions:xpreferColorScheme&#45;&gt;PreferColorScheme:xPreferColorScheme</title>+<path fill="none" stroke="black" d="M490,-1630C545.5,-1630 553.1,-1587.35 605.04,-1584.19"/>+<polygon fill="black" stroke="black" points="604.79,-1585.94 609.74,-1584.05 604.69,-1582.45 604.79,-1585.94"/>+</g>+<!-- ChartTree -->+<g id="node30" class="node">+<title>ChartTree</title>+<g id="a_node30"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Primitive.html#t:ChartTree" xlink:title="&lt;xChartTree&gt; ChartTree| &lt;xtree&gt; tree| &lt;xcharts&#39;&gt; charts&#39;">+<polygon fill="none" stroke="black" points="153.5,-1367.25 153.5,-1440.75 224.25,-1440.75 224.25,-1367.25 153.5,-1367.25"/>+<text text-anchor="middle" x="188.88" y="-1423.45" font-family="Times,serif" font-size="14.00">ChartTree</text>+<polyline fill="none" stroke="black" points="153.5,-1416.25 224.25,-1416.25"/>+<text text-anchor="middle" x="188.88" y="-1398.95" font-family="Times,serif" font-size="14.00">tree</text>+<polyline fill="none" stroke="black" points="153.5,-1391.75 224.25,-1391.75"/>+<text text-anchor="middle" x="188.88" y="-1374.45" font-family="Times,serif" font-size="14.00">charts&#39;</text>+</a>+</g>+</g>+<!-- ChartTree&#45;&gt;Tree -->+<g id="edge44" class="edge">+<title>ChartTree:xtree&#45;&gt;Tree:xTree</title>+<path fill="none" stroke="black" d="M224.88,-1404C284.81,-1404 354.51,-1408.8 394.93,-1412.06"/>+<polygon fill="black" stroke="black" points="394.77,-1413.8 399.9,-1412.46 395.06,-1410.31 394.77,-1413.8"/>+</g>+<!-- ChartTree&#45;&gt;Chart -->+<g id="edge45" class="edge">+<title>ChartTree:xcharts&#39;&#45;&gt;Chart:xChart</title>+<path fill="none" stroke="black" d="M224.88,-1379C341.04,-1379 640.02,-1394.86 746.75,-1349 828.28,-1313.97 806.01,-1213.84 889.55,-1209.17"/>+<polygon fill="black" stroke="black" points="889.29,-1210.93 894.24,-1209.04 889.19,-1207.43 889.29,-1210.93"/>+<text text-anchor="middle" x="545.88" y="-1383.2" font-family="Times,serif" font-size="14.00">each</text>+</g>+<!-- ChartOptions -->+<g id="node31" class="node">+<title>ChartOptions</title>+<g id="a_node31"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Markup.html#t:ChartOptions" xlink:title="&lt;xChartOptions&gt; ChartOptions| &lt;xmarkupOptions&gt; markupOptions| &lt;xhudOptions&gt; hudOptions| &lt;xchartTree&gt; chartTree">+<polygon fill="none" stroke="black" points="0,-1417 0,-1515 100.75,-1515 100.75,-1417 0,-1417"/>+<text text-anchor="middle" x="50.38" y="-1497.7" font-family="Times,serif" font-size="14.00">ChartOptions</text>+<polyline fill="none" stroke="black" points="0,-1490.5 100.75,-1490.5"/>+<text text-anchor="middle" x="50.38" y="-1473.2" font-family="Times,serif" font-size="14.00">markupOptions</text>+<polyline fill="none" stroke="black" points="0,-1466 100.75,-1466"/>+<text text-anchor="middle" x="50.38" y="-1448.7" font-family="Times,serif" font-size="14.00">hudOptions</text>+<polyline fill="none" stroke="black" points="0,-1441.5 100.75,-1441.5"/>+<text text-anchor="middle" x="50.38" y="-1424.2" font-family="Times,serif" font-size="14.00">chartTree</text>+</a>+</g>+</g>+<!-- ChartOptions&#45;&gt;MarkupOptions -->+<g id="edge46" class="edge">+<title>ChartOptions:xmarkupOptions&#45;&gt;MarkupOptions:xMarkupOptions</title>+<path fill="none" stroke="black" d="M100.75,-1478C183.16,-1478 60.11,-1654.91 131.28,-1664.59"/>+<polygon fill="black" stroke="black" points="131.14,-1666.33 136.24,-1664.9 131.36,-1662.84 131.14,-1666.33"/>+</g>+<!-- ChartOptions&#45;&gt;HudOptions -->+<g id="edge47" class="edge">+<title>ChartOptions:xhudOptions&#45;&gt;HudOptions:xHudOptions</title>+<path fill="none" stroke="black" d="M100.75,-1454C134.15,-1454 114.1,-1173.95 141.23,-1141.13"/>+<polygon fill="black" stroke="black" points="142.03,-1142.69 145.55,-1138.73 140.33,-1139.63 142.03,-1142.69"/>+</g>+<!-- ChartOptions&#45;&gt;ChartTree -->+<g id="edge48" class="edge">+<title>ChartOptions:xchartTree&#45;&gt;ChartTree:xChartTree</title>+<path fill="none" stroke="black" d="M100.75,-1429C121.74,-1429 128.47,-1429 146.79,-1429"/>+<polygon fill="black" stroke="black" points="146.36,-1430.75 151.36,-1429 146.36,-1427.25 146.36,-1430.75"/>+</g>+<!-- ChartData -->+<g id="node32" class="node">+<title>ChartData</title>+<g id="a_node32"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Primitive.html#t:ChartData" xlink:title="&lt;xChartData&gt; ChartData| &lt;xtextData&#39;&gt; textData&#39;| &lt;xrectData&#39;&gt; rectData&#39;| &lt;xpathData&#39;&gt; pathData&#39;| &lt;xlineData&#39;&gt; lineData&#39;| &lt;xglyphData&#39;&gt; glyphData&#39;| &lt;xblankData&#39;&gt; blankData&#39;">+<polygon fill="none" stroke="black" points="1140.38,-1464.25 1140.38,-1635.75 1214.88,-1635.75 1214.88,-1464.25 1140.38,-1464.25"/>+<text text-anchor="middle" x="1177.62" y="-1618.45" font-family="Times,serif" font-size="14.00">ChartData</text>+<polyline fill="none" stroke="black" points="1140.38,-1611.25 1214.88,-1611.25"/>+<text text-anchor="middle" x="1177.62" y="-1593.95" font-family="Times,serif" font-size="14.00">textData&#39;</text>+<polyline fill="none" stroke="black" points="1140.38,-1586.75 1214.88,-1586.75"/>+<text text-anchor="middle" x="1177.62" y="-1569.45" font-family="Times,serif" font-size="14.00">rectData&#39;</text>+<polyline fill="none" stroke="black" points="1140.38,-1562.25 1214.88,-1562.25"/>+<text text-anchor="middle" x="1177.62" y="-1544.95" font-family="Times,serif" font-size="14.00">pathData&#39;</text>+<polyline fill="none" stroke="black" points="1140.38,-1537.75 1214.88,-1537.75"/>+<text text-anchor="middle" x="1177.62" y="-1520.45" font-family="Times,serif" font-size="14.00">lineData&#39;</text>+<polyline fill="none" stroke="black" points="1140.38,-1513.25 1214.88,-1513.25"/>+<text text-anchor="middle" x="1177.62" y="-1495.95" font-family="Times,serif" font-size="14.00">glyphData&#39;</text>+<polyline fill="none" stroke="black" points="1140.38,-1488.75 1214.88,-1488.75"/>+<text text-anchor="middle" x="1177.62" y="-1471.45" font-family="Times,serif" font-size="14.00">blankData&#39;</text>+</a>+</g>+</g>+<!-- ChartData&#45;&gt;Rect -->+<g id="edge50" class="edge">+<title>ChartData:xrectData&#39;&#45;&gt;Rect:xRect</title>+<path fill="none" stroke="black" d="M1215.62,-1575C1277.5,-1575 1348.98,-1586.01 1390.05,-1593.42"/>+<polygon fill="black" stroke="black" points="1389.66,-1595.13 1394.89,-1594.3 1390.29,-1591.68 1389.66,-1595.13"/>+<text text-anchor="middle" x="1308.25" y="-1588.2" font-family="Times,serif" font-size="14.00">_Just % each</text>+</g>+<!-- ChartData&#45;&gt;Rect -->+<g id="edge54" class="edge">+<title>ChartData:xblankData&#39;&#45;&gt;Rect:xRect</title>+<path fill="none" stroke="black" d="M1215.62,-1476C1274.93,-1476 1301.9,-1469.98 1344.25,-1511.5 1364.28,-1531.14 1343.82,-1550.85 1362.25,-1572 1369.67,-1580.52 1380.21,-1586.59 1390.48,-1590.84"/>+<polygon fill="black" stroke="black" points="1389.76,-1592.44 1395.05,-1592.6 1391.01,-1589.18 1389.76,-1592.44"/>+<text text-anchor="middle" x="1308.25" y="-1514.2" font-family="Times,serif" font-size="14.00">_Just % each</text>+</g>+<!-- ChartData&#45;&gt;Point -->+<g id="edge52" class="edge">+<title>ChartData:xlineData&#39;&#45;&gt;Point:xPoint</title>+<path fill="none" stroke="black" d="M1215.62,-1525C1250.1,-1525 1246.96,-1495.42 1272.25,-1472 1312.06,-1435.13 1313.99,-1414.32 1362.25,-1389.5 1455.06,-1341.77 1494.3,-1377.69 1592,-1341 1601.69,-1337.36 1603.73,-1330.39 1610.99,-1327.91"/>+<polygon fill="black" stroke="black" points="1610.82,-1329.7 1615.5,-1327.23 1610.3,-1326.24 1610.82,-1329.7"/>+<text text-anchor="middle" x="1423.88" y="-1392.2" font-family="Times,serif" font-size="14.00">_Just % each % each</text>+</g>+<!-- ChartData&#45;&gt;Point -->+<g id="edge53" class="edge">+<title>ChartData:xglyphData&#39;&#45;&gt;Point:xPoint</title>+<path fill="none" stroke="black" d="M1215.62,-1501C1268.65,-1501 1236.02,-1434.71 1272.25,-1396 1304.53,-1361.52 1317.2,-1353.67 1362.25,-1339.5 1468.38,-1306.11 1502.38,-1326.22 1610.77,-1326.98"/>+<polygon fill="black" stroke="black" points="1610.48,-1328.73 1615.49,-1326.99 1610.49,-1325.23 1610.48,-1328.73"/>+<text text-anchor="middle" x="1423.88" y="-1342.2" font-family="Times,serif" font-size="14.00">_Just % each</text>+</g>+<!-- ChartData&#45;&gt;PathData -->+<g id="edge51" class="edge">+<title>ChartData:xpathData&#39;&#45;&gt;PathData:xPathData</title>+<path fill="none" stroke="black" d="M1215.62,-1550C1290.95,-1550 1311.33,-1550 1383.65,-1550"/>+<polygon fill="black" stroke="black" points="1383.36,-1551.75 1388.36,-1550 1383.36,-1548.25 1383.36,-1551.75"/>+<text text-anchor="middle" x="1308.25" y="-1553.2" font-family="Times,serif" font-size="14.00">_Just % each</text>+</g>+<!-- (Text,Point) -->+<g id="node40" class="node">+<title>(Text,Point)</title>+<polygon fill="none" stroke="black" points="1382.88,-1637.25 1382.88,-1710.75 1464.88,-1710.75 1464.88,-1637.25 1382.88,-1637.25"/>+<text text-anchor="middle" x="1423.88" y="-1693.45" font-family="Times,serif" font-size="14.00">(Text,Point)</text>+<polyline fill="none" stroke="black" points="1382.88,-1686.25 1464.88,-1686.25"/>+<text text-anchor="middle" x="1423.88" y="-1668.95" font-family="Times,serif" font-size="14.00">_2</text>+<polyline fill="none" stroke="black" points="1382.88,-1661.75 1464.88,-1661.75"/>+<text text-anchor="middle" x="1423.88" y="-1644.45" font-family="Times,serif" font-size="14.00">_1</text>+</g>+<!-- ChartData&#45;&gt;(Text,Point) -->+<g id="edge49" class="edge">+<title>ChartData:xtextData&#39;&#45;&gt;(Text,Point):x(Text,Point)</title>+<path fill="none" stroke="black" d="M1215.62,-1599C1299.66,-1599 1295.9,-1693.99 1375.48,-1698.81"/>+<polygon fill="black" stroke="black" points="1375.31,-1700.56 1380.36,-1698.95 1375.42,-1697.06 1375.31,-1700.56"/>+<text text-anchor="middle" x="1308.25" y="-1693.2" font-family="Times,serif" font-size="14.00">_Just % each</text>+</g>+<!-- Chart&#45;&gt;Style -->+<g id="edge55" class="edge">+<title>Chart:xchartStyle&#45;&gt;Style:xStyle</title>+<path fill="none" stroke="black" d="M967.75,-1184C1044.82,-1184 1055.82,-1127.24 1129.28,-1124.13"/>+<polygon fill="black" stroke="black" points="1129.15,-1125.89 1134.11,-1124.03 1129.08,-1122.39 1129.15,-1125.89"/>+</g>+<!-- Chart&#45;&gt;ChartData -->+<g id="edge56" class="edge">+<title>Chart:xchartData&#45;&gt;ChartData:xChartData</title>+<path fill="none" stroke="black" d="M967.75,-1159C1075.76,-1159 1031.29,-1606.01 1133.35,-1623.47"/>+<polygon fill="black" stroke="black" points="1132.99,-1625.2 1138.12,-1623.87 1133.28,-1621.71 1132.99,-1625.2"/>+</g>+<!-- AxisOptions&#45;&gt;Ticks -->+<g id="edge57" class="edge">+<title>AxisOptions:xticks&#45;&gt;Ticks:xTicks</title>+<path fill="none" stroke="black" d="M471.75,-613C554.84,-613 552.19,-705.14 630.93,-709.82"/>+<polygon fill="black" stroke="black" points="630.69,-711.56 635.74,-709.96 630.79,-708.06 630.69,-711.56"/>+</g>+<!-- AxisOptions&#45;&gt;Place -->+<g id="edge58" class="edge">+<title>AxisOptions:xplace&#45;&gt;Place:xPlace</title>+<path fill="none" stroke="black" d="M471.75,-588C511.6,-588 483.03,-638.95 508,-670 590.45,-772.53 656.03,-749.72 746.75,-845 748.93,-847.29 858.58,-1018.54 880.88,-1049.3"/>+<polygon fill="black" stroke="black" points="879.26,-1050.08 883.79,-1052.83 881.97,-1047.86 879.26,-1050.08"/>+</g>+<!-- AxisBar -->+<g id="node36" class="node">+<title>AxisBar</title>+<g id="a_node36"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Hud.html#t:AxisBar" xlink:title="&lt;xAxisBar&gt; AxisBar| &lt;xstyle&gt; style| &lt;xsize&gt; size| &lt;xoverhang&gt; overhang| &lt;xbuffer&gt; buffer| &lt;xanchorTo&gt; anchorTo">+<polygon fill="none" stroke="black" points="897.88,-343.5 897.88,-490.5 965.62,-490.5 965.62,-343.5 897.88,-343.5"/>+<text text-anchor="middle" x="931.75" y="-473.2" font-family="Times,serif" font-size="14.00">AxisBar</text>+<polyline fill="none" stroke="black" points="897.88,-466 965.62,-466"/>+<text text-anchor="middle" x="931.75" y="-448.7" font-family="Times,serif" font-size="14.00">style</text>+<polyline fill="none" stroke="black" points="897.88,-441.5 965.62,-441.5"/>+<text text-anchor="middle" x="931.75" y="-424.2" font-family="Times,serif" font-size="14.00">size</text>+<polyline fill="none" stroke="black" points="897.88,-417 965.62,-417"/>+<text text-anchor="middle" x="931.75" y="-399.7" font-family="Times,serif" font-size="14.00">overhang</text>+<polyline fill="none" stroke="black" points="897.88,-392.5 965.62,-392.5"/>+<text text-anchor="middle" x="931.75" y="-375.2" font-family="Times,serif" font-size="14.00">buffer</text>+<polyline fill="none" stroke="black" points="897.88,-368 965.62,-368"/>+<text text-anchor="middle" x="931.75" y="-350.7" font-family="Times,serif" font-size="14.00">anchorTo</text>+</a>+</g>+</g>+<!-- AxisOptions&#45;&gt;AxisBar -->+<g id="edge59" class="edge">+<title>AxisOptions:xaxisBar&#45;&gt;AxisBar:xAxisBar</title>+<path fill="none" stroke="black" d="M471.75,-563C594.56,-563 627.27,-564.41 746.75,-536 814.25,-519.95 824.69,-480.41 890.63,-478.11"/>+<polygon fill="black" stroke="black" points="890.27,-479.86 895.24,-478.03 890.21,-476.36 890.27,-479.86"/>+<text text-anchor="middle" x="674.25" y="-563.2" font-family="Times,serif" font-size="14.00">_Just</text>+</g>+<!-- Adjustments -->+<g id="node39" class="node">+<title>Adjustments</title>+<g id="a_node39"><a xlink:href="https://hackage.haskell.org/package/chart-svg/docs/Chart-Hud.html#t:Adjustments" xlink:title="&lt;xAdjustments&gt; Adjustments| &lt;xmaxYRatio&gt; maxYRatio| &lt;xmaxXRatio&gt; maxXRatio| &lt;xangledRatio&gt; angledRatio| &lt;xallowDiagonal&gt; allowDiagonal">+<polygon fill="none" stroke="black" points="626.5,-403.75 626.5,-526.25 722,-526.25 722,-403.75 626.5,-403.75"/>+<text text-anchor="middle" x="674.25" y="-508.95" font-family="Times,serif" font-size="14.00">Adjustments</text>+<polyline fill="none" stroke="black" points="626.5,-501.75 722,-501.75"/>+<text text-anchor="middle" x="674.25" y="-484.45" font-family="Times,serif" font-size="14.00">maxYRatio</text>+<polyline fill="none" stroke="black" points="626.5,-477.25 722,-477.25"/>+<text text-anchor="middle" x="674.25" y="-459.95" font-family="Times,serif" font-size="14.00">maxXRatio</text>+<polyline fill="none" stroke="black" points="626.5,-452.75 722,-452.75"/>+<text text-anchor="middle" x="674.25" y="-435.45" font-family="Times,serif" font-size="14.00">angledRatio</text>+<polyline fill="none" stroke="black" points="626.5,-428.25 722,-428.25"/>+<text text-anchor="middle" x="674.25" y="-410.95" font-family="Times,serif" font-size="14.00">allowDiagonal</text>+</a>+</g>+</g>+<!-- AxisOptions&#45;&gt;Adjustments -->+<g id="edge60" class="edge">+<title>AxisOptions:xadjustments&#45;&gt;Adjustments:xAdjustments</title>+<path fill="none" stroke="black" d="M471.75,-539C488.12,-539 491.86,-535.22 508,-532.5 557.89,-524.09 571.4,-514.8 618.96,-514.05"/>+<polygon fill="black" stroke="black" points="618.75,-515.8 623.74,-514.01 618.72,-512.3 618.75,-515.8"/>+<text text-anchor="middle" x="545.88" y="-535.2" font-family="Times,serif" font-size="14.00">_Just</text>+</g>+<!-- AxisBar&#45;&gt;Style -->+<g id="edge61" class="edge">+<title>AxisBar:xstyle&#45;&gt;Style:xStyle</title>+<path fill="none" stroke="black" d="M966.75,-454C990.42,-454 980.16,-481.12 996.75,-498 1029.66,-531.48 1059.51,-518.35 1083,-559 1113.5,-611.78 1075.28,-1090.61 1129.69,-1122.35"/>+<polygon fill="black" stroke="black" points="1128.88,-1123.94 1134.17,-1123.59 1129.82,-1120.57 1128.88,-1123.94"/>+</g>+<!-- AxisBar&#45;&gt;HudChartSection -->+<g id="edge62" class="edge">+<title>AxisBar:xanchorTo&#45;&gt;HudChartSection:xHudChartSection</title>+<path fill="none" stroke="black" d="M966.75,-356C1030.29,-356 1047.76,-356 1108.24,-356"/>+<polygon fill="black" stroke="black" points="1108.11,-357.75 1113.11,-356 1108.11,-354.25 1108.11,-357.75"/>+</g>+<!-- (Text,Point)&#45;&gt;Point -->+<g id="edge63" class="edge">+<title>(Text,Point):x_2&#45;&gt;Point:xPoint</title>+<path fill="none" stroke="black" d="M1465.88,-1674C1488.1,-1674 1480.05,-1649.55 1485.5,-1628 1496.12,-1586.03 1478.36,-1469.25 1503.5,-1434 1528.56,-1398.85 1562.52,-1425.53 1592,-1394 1612.01,-1372.6 1589.36,-1333.72 1610.6,-1327.77"/>+<polygon fill="black" stroke="black" points="1610.74,-1329.52 1615.5,-1327.18 1610.32,-1326.04 1610.74,-1329.52"/>+</g>+</g>+</svg>
+ other/nh10.svg view
@@ -0,0 +1,32 @@+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1766" height="500" viewBox="-1.7665 -0.5000 3.5329 1.0"><style>svg {+  color-scheme: light dark;+}+{+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {+    fill: rgb(5%, 5%, 5%);+  }+  .ticklines g, .tickglyph g, .legendBorder g {+    stroke: rgb(5%, 5%, 5%);+  }+  .legendBorder g {+    fill: rgb(94%, 94%, 94%);+  }+}+@media (prefers-color-scheme:dark) {+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {+    fill: rgb(94%, 94%, 94%);+  }+  .ticklines g, .tickglyph g, .legendBorder g {+    stroke: rgb(94%, 94%, 94%);+  }+  .legendBorder g {+    fill: rgb(5%, 5%, 5%);+  }+}+svg { font-family: system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";+}++ticktext { font-family: SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;+}++</style><g class="chart"><g class="edges"><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M -0.2315,-0.0563 C -0.2048,-0.0850 -0.1717,-0.1207 -0.1433,-0.1513 L -0.1298,-0.1658"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M -0.0485,-0.0563 C -0.0539,-0.0834 -0.0606,-0.1168 -0.0665,-0.1462 L -0.0704,-0.1658"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M -0.1250,-0.2778 C -0.1486,-0.3063 -0.1778,-0.3416 -0.2030,-0.3720 L -0.2158,-0.3874"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M -0.0421,-0.2778 C -0.0214,-0.3063 0.0043,-0.3416 0.0264,-0.3720 L 0.0377,-0.3874"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M 0.1941,-0.2778 C 0.1734,-0.3063 0.1477,-0.3416 0.1256,-0.3720 L 0.1143,-0.3874"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M 0.5271,0.3868 C 0.5104,0.3588 0.4897,0.3243 0.4717,0.2943 L 0.4614,0.2772"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M 0.4262,0.1655 C 0.4207,0.1084 0.4066,0.0162 0.3714,-0.0554 C 0.3539,-0.0909 0.3270,-0.1251 0.3015,-0.1529 L 0.2892,-0.1661"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M 0.3462,0.1759 C 0.3372,0.1722 0.3280,0.1689 0.3191,0.1662 C 0.0134,0.0723 -0.0861,0.1492 -0.3917,0.0554 C -0.3945,0.0545 -0.3973,0.0536 -0.4001,0.0526 L -0.4188,0.0456"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M 0.1704,0.1652 C 0.1810,0.1376 0.1942,0.1034 0.2057,0.0736 L 0.2126,0.0557"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M -0.4182,-0.0462 C -0.3566,-0.0776 -0.2722,-0.1207 -0.2032,-0.1560 L -0.1860,-0.1648"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M -0.4918,-0.0563 C -0.4864,-0.0834 -0.4797,-0.1168 -0.4738,-0.1462 L -0.4699,-0.1658"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M 0.1545,-0.0569 C 0.1115,-0.0864 0.0579,-0.1232 0.0127,-0.1542 L -0.0035,-0.1654"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M 0.2329,-0.0563 C 0.2329,-0.0834 0.2329,-0.1168 0.2329,-0.1462 L 0.2329,-0.1658"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M -0.4099,-0.2778 C -0.3833,-0.3066 -0.3502,-0.3422 -0.3218,-0.3728 L -0.3083,-0.3874"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M 0.3326,0.3868 C 0.3493,0.3588 0.3700,0.3243 0.3880,0.2943 L 0.3983,0.2772"/></g></g><g class="shapes"><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><rect width="0.1946" height="0.1108" x="-0.3567" y="-0.4985"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><rect width="0.1662" height="0.1108" x="-0.3640" y="-0.0554"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><rect width="0.2062" height="0.1108" x="-0.1409" y="-0.0554"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><rect width="0.2477" height="0.1108" x="-0.2048" y="-0.2769"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><rect width="0.1900" height="0.1108" x="0.1379" y="-0.2769"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><rect width="0.2015" height="0.1108" x="0.4583" y="0.3877"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><rect width="0.1662" height="0.1108" x="0.3468" y="0.1662"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><rect width="0.2869" height="0.1108" x="-0.0675" y="-0.4985"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><rect width="0.2800" height="0.1108" x="0.0098" y="0.1662"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><rect width="0.1662" height="0.1108" x="-0.5855" y="-0.0554"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><rect width="0.2223" height="0.1108" x="0.1218" y="-0.0554"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><rect width="0.2385" height="0.1108" x="-0.5786" y="-0.2769"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><rect width="0.2062" height="0.1108" x="0.1975" y="0.3877"/></g></g><g class="labels"><g stroke-width="0.0" stroke="none" fill="rgb(40%, 40%, 40%)" fill-opacity="0.8" font-size="0.0369" text-anchor="middle"><text x="-0.2594" y="-0.4308"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Additive.html#t:Additive">Additive</a></text><text x="-0.2809" y="0.0123"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Metric.html#t:Basis">Basis</a></text><text x="-0.0378" y="0.0123"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Metric.html#t:Direction">Direction</a></text><text x="-0.0809" y="-0.2092"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Ring.html#t:Distributive">Distributive</a></text><text x="0.2329" y="-0.2092"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Multiplicative.html#t:Divisive">Divisive</a></text><text x="0.5591" y="0.4554"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Field.html#t:ExpField">ExpField</a></text><text x="0.4298" y="0.2338"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Field.html#t:Field">Field</a></text><text x="0.0760" y="-0.4308"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Multiplicative.html#t:Multiplicative">Multiplicative</a></text><text x="0.1498" y="0.2338"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Field.html#t:QuotientField">QuotientField</a></text><text x="-0.5025" y="0.0123"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Ring.html#t:Ring">Ring</a></text><text x="0.2329" y="0.0123"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Field.html#t:SemiField">SemiField</a></text><text x="-0.4594" y="-0.2092"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Additive.html#t:Subtractive">Subtractive</a></text><text x="0.3006" y="0.4554"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Field.html#t:TrigField">TrigField</a></text></g></g></g><g class="hud"></g></svg>
+ other/nh12.svg view
@@ -0,0 +1,32 @@+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1931" height="500" viewBox="-1.9314 -0.5000 3.8628 1.0"><style>svg {+  color-scheme: light dark;+}+{+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {+    fill: rgb(5%, 5%, 5%);+  }+  .ticklines g, .tickglyph g, .legendBorder g {+    stroke: rgb(5%, 5%, 5%);+  }+  .legendBorder g {+    fill: rgb(94%, 94%, 94%);+  }+}+@media (prefers-color-scheme:dark) {+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {+    fill: rgb(94%, 94%, 94%);+  }+  .ticklines g, .tickglyph g, .legendBorder g {+    stroke: rgb(94%, 94%, 94%);+  }+  .legendBorder g {+    fill: rgb(5%, 5%, 5%);+  }+}+svg { font-family: system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";+}++ticktext { font-family: SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;+}++</style><g class="chart"><g class="edges"><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M 0.4258,-0.0563 C 0.3930,-0.0853 0.3522,-0.1214 0.3175,-0.1522 L 0.3030,-0.1651"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M 0.2428,-0.0563 C 0.2428,-0.0834 0.2428,-0.1168 0.2428,-0.1462 L 0.2428,-0.1658"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M 0.2793,-0.2778 C 0.2986,-0.3060 0.3225,-0.3410 0.3433,-0.3711 L 0.3544,-0.3874"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M 0.1804,-0.2778 C 0.1464,-0.3069 0.1041,-0.3430 0.0680,-0.3738 L 0.0530,-0.3866"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M -0.1995,-0.2778 C -0.1655,-0.3069 -0.1232,-0.3430 -0.0871,-0.3738 L -0.0721,-0.3866"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M -0.2781,0.3868 C -0.3104,0.3578 -0.3507,0.3216 -0.3850,0.2908 L -0.3993,0.2780"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M -0.4552,0.1655 C -0.4496,0.1084 -0.4355,0.0162 -0.4003,-0.0554 C -0.3828,-0.0909 -0.3559,-0.1251 -0.3305,-0.1529 L -0.3181,-0.1661"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M -0.3752,0.1756 C -0.3662,0.1720 -0.3570,0.1687 -0.3480,0.1662 C 0.0584,0.0498 0.1902,0.1718 0.5966,0.0554 C 0.5994,0.0546 0.6022,0.0537 0.6051,0.0528 L 0.6238,0.0460"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M 0.0551,-0.0563 C 0.0887,-0.0853 0.1305,-0.1214 0.1662,-0.1522 L 0.1810,-0.1651"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M -0.1993,0.1652 C -0.2100,0.1376 -0.2231,0.1034 -0.2346,0.0736 L -0.2415,0.0557"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M -0.4588,0.3868 C -0.4588,0.3596 -0.4588,0.3263 -0.4588,0.2968 L -0.4588,0.2772"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M 0.6240,-0.0426 C 0.6147,-0.0469 0.6055,-0.0513 0.5966,-0.0554 C 0.5246,-0.0890 0.4442,-0.1261 0.3782,-0.1564 L 0.3600,-0.1647"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M 0.6869,-0.0563 C 0.6762,-0.0840 0.6630,-0.1181 0.6515,-0.1479 L 0.6446,-0.1658"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M -0.1498,-0.0509 C -0.0762,-0.0823 0.0210,-0.1238 0.1002,-0.1576 L 0.1178,-0.1651"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M -0.2618,-0.0563 C -0.2618,-0.0834 -0.2618,-0.1168 -0.2618,-0.1462 L -0.2618,-0.1658"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M 0.5665,-0.2778 C 0.5350,-0.3069 0.4958,-0.3430 0.4623,-0.3738 L 0.4484,-0.3866"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(0%, 0%, 0%)" fill-opacity="0"><path d="M -0.6418,0.3868 C -0.6090,0.3578 -0.5682,0.3216 -0.5335,0.2908 L -0.5190,0.2780"/></g></g><g class="shapes"><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><rect width="0.1946" height="0.1108" x="0.2932" y="-0.4985"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><rect width="0.1662" height="0.1108" x="0.4028" y="-0.0554"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><rect width="0.2062" height="0.1108" x="0.1397" y="-0.0554"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><rect width="0.2477" height="0.1108" x="0.1189" y="-0.2769"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><rect width="0.1900" height="0.1108" x="-0.3568" y="-0.2769"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><rect width="0.2015" height="0.1108" x="-0.3195" y="0.3877"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><rect width="0.1662" height="0.1108" x="-0.5418" y="0.1662"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><rect width="0.1785" height="0.1108" x="-0.0957" y="-0.0554"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><rect width="0.2869" height="0.1108" x="-0.1530" y="-0.4985"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><rect width="0.2800" height="0.1108" x="-0.3188" y="0.1662"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><rect width="0.1662" height="0.1108" x="-0.5418" y="0.3877"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><rect width="0.1662" height="0.1108" x="0.6243" y="-0.0554"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><rect width="0.2223" height="0.1108" x="-0.3730" y="-0.0554"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><rect width="0.2385" height="0.1108" x="0.5051" y="-0.2769"/></g><g stroke-width="0.0031" stroke="rgb(40%, 40%, 40%)" stroke-opacity="0.8" fill="rgb(50%, 50%, 50%)" fill-opacity="0.2"><rect width="0.2062" height="0.1108" x="-0.8049" y="0.3877"/></g></g><g class="labels"><g stroke-width="0.0" stroke="none" fill="rgb(40%, 40%, 40%)" fill-opacity="0.8" font-size="0.0369" text-anchor="middle"><text x="0.3905" y="-0.4308"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Additive.html#t:Additive">Additive</a></text><text x="0.4858" y="0.0123"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Metric.html#t:Basis">Basis</a></text><text x="0.2428" y="0.0123"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Metric.html#t:Direction">Direction</a></text><text x="0.2428" y="-0.2092"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Ring.html#t:Distributive">Distributive</a></text><text x="-0.2618" y="-0.2092"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Multiplicative.html#t:Divisive">Divisive</a></text><text x="-0.2188" y="0.4554"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Field.html#t:ExpField">ExpField</a></text><text x="-0.4588" y="0.2338"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Field.html#t:Field">Field</a></text><text x="-0.0065" y="0.0123"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Data-Integral.html#t:Integral">Integral</a></text><text x="-0.0095" y="-0.4308"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Multiplicative.html#t:Multiplicative">Multiplicative</a></text><text x="-0.1788" y="0.2338"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Field.html#t:QuotientField">QuotientField</a></text><text x="-0.4588" y="0.4554"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Data-Rational.html#t:Ratio">Ratio</a></text><text x="0.7074" y="0.0123"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Ring.html#t:Ring">Ring</a></text><text x="-0.2618" y="0.0123"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Field.html#t:SemiField">SemiField</a></text><text x="0.6243" y="-0.2092"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Additive.html#t:Subtractive">Subtractive</a></text><text x="-0.7018" y="0.4554"><a href="https://hackage.haskell.org/package/numhask/docs/NumHask-Algebra-Field.html#t:TrigField">TrigField</a></text></g></g></g><g class="hud"></g></svg>
+ readme.md view
@@ -0,0 +1,303 @@++# Table of Contents++1.  [Introduction](#orgf187caa)+    1.  [Reference](#org9cbd848)+    2.  [Similar projects](#orgdec9e8f)+    3.  [development wish list](#org97f432e)+2.  [process pipelines](#orgd1d85da)+    1.  [algebraic-graphs](#orgfab6886)+    2.  [dotparse Graph](#orgb18c248)+    3.  [dotPrint](#org3454fc8)+    4.  [processDotWith](#org32b8f10)+    5.  [processDot](#org73a9a3b)+    6.  [processGraph](#org15407d1)+    7.  [graphToChartWith](#orgf541717)+3.  [Development](#org7bb46ff)+    1.  [imports](#org2f672d9)+    2.  [testAll](#orgee189c9)+    3.  [numhask](#org176b014)+4.  [chart-svg AST](#org223882c)++[![img](https://img.shields.io/hackage/v/dotparse.svg)](https://hackage.haskell.org/package/dotparse) [![img](https://github.com/tonyday567/dotparse/workflows/haskell-ci/badge.svg)](https://github.com/tonyday567/chart-svg/actions?query=workflow%3Ahaskell-ci)+++<a id="orgf187caa"></a>++# Introduction++Parsing and printing for the dot language of graphviz.++-   A close rendition of the [dot language specification](http://www.graphviz.org/doc/info/lang.html)+-   Supports inexact printing . parsing round trip; forgetting comments, separator choice and whitespace.+-   Treats attribute keys and values as ByteStrings. No Type safety of Attributes is attempted.+-   Uses command-line graphviz programs \`dot\` and \`neato\` to augment dot graph specifications+-   Supports conversion from and to [algebraic-graphs](https://hackage.haskell.org/package/algebraic-graphs).+-   Support rendering dot graphs using [chart-svg](https://hackage.haskell.org/package/chart-svg).+-   Uses [flatparse](https://hackage.haskell.org/package/flatparse) for speedy parsing.+++<a id="org9cbd848"></a>++## Reference++Graphviz documentation:++[Graphviz Main Page](https://www.graphviz.org/)++[Graphviz Visual Editor](http://magjac.com/graphviz-visual-editor/)++[Attributes | Graphviz](http://www.graphviz.org/doc/info/attrs.html)++[Dot Grammar](http://www.graphviz.org/pdf/dot.1.pdf)++Graphviz practical examples:++<https://renenyffenegger.ch/notes/tools/Graphviz/examples/index>++<https://renenyffenegger.ch/notes/tools/Graphviz/attributes/label/HTML-like/index>+++<a id="orgdec9e8f"></a>++## Similar projects++The [graphviz](https://hackage.haskell.org/package/graphviz) library aims for comprehensive typing of graphviz attributes and syntax. As a result, it is quite large and somewhat incomplete. In contrast, dotparse parsing is simpler, more robust and faster. It is also somewhat tied to fgl and I wanted to try a different graph library.++[dotgen](https://hackage.haskell.org/package/dotgen) is a dot graph printer but not a parser. It supports a monadic style of printing. Specifically, it supports generation of unique names if that is an important feature of the problem domain.+++<a id="org97f432e"></a>++## development wish list++Target [calligraphy](https://hackage.haskell.org/package/calligraphy) for enhanced source code visualization.++Broaden support to include fgl and containers.++Support parsing of library graphs from cabal.++Explore [tagged partial birectional isomorphism](https://kowainik.github.io/posts/2019-01-14-tomland#tagged-partial-bidirectional-isomorphism) style.++Steal design ideas from [jordan](https://hackage.haskell.org/package/jordan).+++<a id="orgd1d85da"></a>++# process pipelines+++<a id="orgfab6886"></a>++## algebraic-graphs++Starting with a Graph from algebraic-graphs:++    import qualified Algebra.Graph as G+    :{+    exAGraph :: G.Graph Int+    exAGraph =+      G.edges $+        [(v, (v + 1) `mod` 6) | v <- [0 .. 5]]+          <> [(v, v + k) | v <- [0 .. 5], k <- [6, 12]]+          <> [(2, 18), (2, 19), (15, 18), (15, 19), (18, 3), (19, 3)]+    :}++    ghci| ghci| ghci| ghci| ghci| ghci| ghci|++    exAGraph++    Overlay (Connect (Vertex 0) (Vertex 1)) (Overlay (Connect (Vertex 1) (Vertex 2)) (Overlay (Connect (Vertex 2) (Vertex 3)) (Overlay (Connect (Vertex 3) (Vertex 4)) (Overlay (Connect (Vertex 4) (Vertex 5)) (Overlay (Connect (Vertex 5) (Vertex 0)) (Overlay (Connect (Vertex 0) (Vertex 6)) (Overlay (Connect (Vertex 0) (Vertex 12)) (Overlay (Connect (Vertex 1) (Vertex 7)) (Overlay (Connect (Vertex 1) (Vertex 13)) (Overlay (Connect (Vertex 2) (Vertex 8)) (Overlay (Connect (Vertex 2) (Vertex 14)) (Overlay (Connect (Vertex 3) (Vertex 9)) (Overlay (Connect (Vertex 3) (Vertex 15)) (Overlay (Connect (Vertex 4) (Vertex 10)) (Overlay (Connect (Vertex 4) (Vertex 16)) (Overlay (Connect (Vertex 5) (Vertex 11)) (Overlay (Connect (Vertex 5) (Vertex 17)) (Overlay (Connect (Vertex 2) (Vertex 18)) (Overlay (Connect (Vertex 2) (Vertex 19)) (Overlay (Connect (Vertex 15) (Vertex 18)) (Overlay (Connect (Vertex 15) (Vertex 19)) (Overlay (Connect (Vertex 18) (Vertex 3)) (Connect (Vertex 19) (Vertex 3))))))))))))))))))))))))+++<a id="orgb18c248"></a>++## dotparse Graph++Convert to a dotparse Graph++    exGraph = defaultGraph & addStatements (toStatements Directed (Char8.pack . show <$> exAGraph))+++<a id="org3454fc8"></a>++## dotPrint++Encode graph as a ByteString (prior to processing via graphviz)++    BS.putStr (dotPrint defaultDotConfig exGraph)++    digraph {+        node [height=0.5;shape=circle]+        graph [overlap=false;size="1!";splines=spline]+        edge [arrowsize=0.5]+        "9"+        "8"+        "7"+        "6"+        "5"+        "4"+        "3"+        "2"+        "19"+        "18"+        "17"+        "16"+        "15"+        "14"+        "13"+        "12"+        "11"+        "10"+        "1"+        "0"+        "5" -> "17"+        "5" -> "11"+        "5" -> "0"+        "4" -> "5"+        "4" -> "16"+        "4" -> "10"+        "3" -> "9"+        "3" -> "4"+        "3" -> "15"+        "2" -> "8"+        "2" -> "3"+        "2" -> "19"+        "2" -> "18"+        "2" -> "14"+        "19" -> "3"+        "18" -> "3"+        "15" -> "19"+        "15" -> "18"+        "1" -> "7"+        "1" -> "2"+        "1" -> "13"+        "0" -> "6"+        "0" -> "12"+        "0" -> "1"+        }+++<a id="org32b8f10"></a>++## processDotWith++Directly create an SVG from the dotparse Graph++    (\b f -> processDotWith Directed ["-Tsvg", "-o", "other/" <> f <> ".svg"] b) (dotPrint defaultDotConfig exGraph) "exdirect"++![img](other/exdirect.svg)+++<a id="org73a9a3b"></a>++## processDot++ByteString of the processed Graph++    BS.putStr =<< processDot Directed (dotPrint defaultDotConfig exInt)+++<a id="org15407d1"></a>++## processGraph++Graph augmented by graphviz++    exGraphAugmented <- processGraph exGraph+    :t exGraphAugmented++    exGraphAugmented :: Graph+++<a id="orgf541717"></a>++## graphToChartWith++SVG production via chart-svg++    import Chart (writeChartOptions)+    writeChartOptions "other/exga.svg" (graphToChart exGraphAugmented)++![img](other/exga.svg)+++<a id="org7bb46ff"></a>++# Development+++<a id="org2f672d9"></a>++## imports++    :reload+    :set -XOverloadedLabels+    :set -XOverloadedStrings+    :set -Wno-type-defaults+    :set -Wno-x-partial+    :set -XImportQualifiedPost+    import Chart+    import Optics.Core+    import FlatParse.Basic qualified as FP+    import qualified Data.ByteString as BS+    import qualified Data.Text as Text+    import qualified Data.ByteString.Char8 as Char8+    import Algebra.Graph qualified as G+    import Data.Monoid+    import GHC.Exts+    import DotParse+    import DotParse.Examples+    import DotParse.Examples.AST+    import DotParse.Examples.NumHask+    import Data.Proxy+    print "ok"++    [6 of 7] Compiling DotParse.Examples.NumHask ( src/DotParse/Examples/NumHask.hs, interpreted ) [Source file changed]+    Ok, 7 modules loaded.+    "ok"+++<a id="orgee189c9"></a>++## testAll++Round-trip test++    testAll++    ex0+    ex1+    ex2+    ex3+    ex4+    ex5+    ex6+    ex7+    ex8+    ex9+    ex10+    ex11+    ex12+    ex13+    ex14+    ex15+++<a id="org176b014"></a>++## numhask++    g <- processGraph (dotGraphNH Directed)+    writeChartOptions "other/nh12.svg" (graphToChartWith (defaultChartConfig & set #chartVshift (-4) & set #textSize 12) toLinkNH g)+++<a id="org223882c"></a>++# chart-svg AST++    g1 = dotAST allSC componentEdges+    BS.writeFile "other/chart-svg-ast.dot" $ dotPrint defaultDotConfig g1++    dot other/chart-svg-ast.dot -Tsvg >other/chart-svg-ast.svg+
− readme.org
@@ -1,262 +0,0 @@-#+TITLE: dotparse--[[https://hackage.haskell.org/package/dotparse][file:https://img.shields.io/hackage/v/dotparse.svg]] [[https://github.com/tonyday567/chart-svg/actions?query=workflow%3Ahaskell-ci][file:https://github.com/tonyday567/dotparse/workflows/haskell-ci/badge.svg]]--* Introduction--Parsing and printing for the dot language of graphviz.--- A close rendition of the [[http://www.graphviz.org/doc/info/lang.html][dot language specification]]-- Supports inexact printing . parsing round trip; forgetting comments, separator choice and whitespace.-- Treats attribute keys and values as ByteStrings. No Type safety of Attributes is attempted.-- Uses command-line graphviz programs `dot` and `neato` to augment dot graph specifications-- Supports conversion from and to [[https://hackage.haskell.org/package/algebraic-graphs][algebraic-graphs]].-- Support rendering dot graphs using [[https://hackage.haskell.org/package/chart-svg][chart-svg]].-- Uses [[https://hackage.haskell.org/package/flatparse][flatparse]] for speedy parsing.--** Reference--Graphviz documentation:--[[https://www.graphviz.org/][Graphviz Main Page]]--[[http://magjac.com/graphviz-visual-editor/][Graphviz Visual Editor]]--[[http://www.graphviz.org/doc/info/attrs.html][Attributes | Graphviz]]--[[http://www.graphviz.org/pdf/dot.1.pdf][Dot Grammar]]--Graphviz practical examples:--https://renenyffenegger.ch/notes/tools/Graphviz/examples/index--https://renenyffenegger.ch/notes/tools/Graphviz/attributes/label/HTML-like/index--** Similar projects--The [[https://hackage.haskell.org/package/graphviz][graphviz]] library aims for comprehensive typing of graphviz attributes and syntax. As a result, it is quite large and somewhat incomplete. In contrast, dotparse parsing is simpler, more robust and faster. It is also somewhat tied to fgl and I wanted to try a different graph library.--[[https://hackage.haskell.org/package/dotgen][dotgen]] is a dot graph printer but not a parser. It supports a monadic style of printing. Specifically, it supports generation of unique names if that is an important feature of the problem domain.--** development wish list--Target [[https://hackage.haskell.org/package/calligraphy][calligraphy]] for enhanced source code visualization.--Broaden support to include fgl and containers.--Support parsing of library graphs from cabal.--Explore [[https://kowainik.github.io/posts/2019-01-14-tomland#tagged-partial-bidirectional-isomorphism][tagged partial birectional isomorphism]] style.--Steal design ideas from [[https://hackage.haskell.org/package/jordan][jordan]].--Case-insensitive parsing blocked on [[https://github.com/AndrasKovacs/flatparse/issues/10][AndrasKovacs/flatparse#10 Case-insensitive keyword matching]].--Exact printing of comments and whitespace.--* process pipelines--** algebraic-graphs-Starting with a Graph from algebraic-graphs:--#+begin_src haskell-import qualified Algebra.Graph as G-:{-exAGraph :: G.Graph Int-exAGraph =-  G.edges $-    [(v, (v + 1) `mod` 6) | v <- [0 .. 5]]-      <> [(v, v + k) | v <- [0 .. 5], k <- [6, 12]]-      <> [(2, 18), (2, 19), (15, 18), (15, 19), (18, 3), (19, 3)]-:}-#+end_src--#+RESULTS:-: ghci| ghci| ghci| ghci| ghci| ghci| ghci|--#+begin_src haskell :results output :exports both-exAGraph-#+end_src--#+RESULTS:-: Overlay (Connect (Vertex 0) (Vertex 1)) (Overlay (Connect (Vertex 1) (Vertex 2)) (Overlay (Connect (Vertex 2) (Vertex 3)) (Overlay (Connect (Vertex 3) (Vertex 4)) (Overlay (Connect (Vertex 4) (Vertex 5)) (Overlay (Connect (Vertex 5) (Vertex 0)) (Overlay (Connect (Vertex 0) (Vertex 6)) (Overlay (Connect (Vertex 0) (Vertex 12)) (Overlay (Connect (Vertex 1) (Vertex 7)) (Overlay (Connect (Vertex 1) (Vertex 13)) (Overlay (Connect (Vertex 2) (Vertex 8)) (Overlay (Connect (Vertex 2) (Vertex 14)) (Overlay (Connect (Vertex 3) (Vertex 9)) (Overlay (Connect (Vertex 3) (Vertex 15)) (Overlay (Connect (Vertex 4) (Vertex 10)) (Overlay (Connect (Vertex 4) (Vertex 16)) (Overlay (Connect (Vertex 5) (Vertex 11)) (Overlay (Connect (Vertex 5) (Vertex 17)) (Overlay (Connect (Vertex 2) (Vertex 18)) (Overlay (Connect (Vertex 2) (Vertex 19)) (Overlay (Connect (Vertex 15) (Vertex 18)) (Overlay (Connect (Vertex 15) (Vertex 19)) (Overlay (Connect (Vertex 18) (Vertex 3)) (Connect (Vertex 19) (Vertex 3))))))))))))))))))))))))--** dotparse Graph--Convert to a dotparse Graph--#+begin_src haskell-exGraph = defaultGraph & addStatements (toStatements Directed (Char8.pack . show <$> exAGraph))-#+end_src--** dotPrint--Encode graph as a ByteString (prior to processing via graphviz)--#+begin_src haskell :results output :exports both-BS.putStr (dotPrint defaultDotConfig exGraph)-#+end_src--#+RESULTS:-#+begin_example-digraph {-    node [height=0.5;shape=circle]-    graph [overlap=false;size="1!";splines=spline]-    edge [arrowsize=0.5]-    "9"-    "8"-    "7"-    "6"-    "5"-    "4"-    "3"-    "2"-    "19"-    "18"-    "17"-    "16"-    "15"-    "14"-    "13"-    "12"-    "11"-    "10"-    "1"-    "0"-    "5" -> "17"-    "5" -> "11"-    "5" -> "0"-    "4" -> "5"-    "4" -> "16"-    "4" -> "10"-    "3" -> "9"-    "3" -> "4"-    "3" -> "15"-    "2" -> "8"-    "2" -> "3"-    "2" -> "19"-    "2" -> "18"-    "2" -> "14"-    "19" -> "3"-    "18" -> "3"-    "15" -> "19"-    "15" -> "18"-    "1" -> "7"-    "1" -> "2"-    "1" -> "13"-    "0" -> "6"-    "0" -> "12"-    "0" -> "1"-    }-#+end_example--** processDotWith--Directly create an SVG from the dotparse Graph--#+begin_src haskell :file other/exdirect.svg :results output graphics file :exports both-(\b f -> processDotWith Directed ["-Tsvg", "-o", "other/" <> f <> ".svg"] b) (dotPrint defaultDotConfig exGraph) "exdirect"-        #+end_src--#+RESULTS:-[[file:other/exdirect.svg]]--** processDot--ByteString of the processed Graph--#+begin_src haskell :results output-BS.putStr =<< processDot Directed (dotPrint defaultDotConfig exInt)-#+end_src--** processGraph--Graph augmented by graphviz--#+begin_src haskell-exGraphAugmented <- processGraph exGraph-:t exGraphAugmented-#+end_src--#+RESULTS:-: exGraphAugmented :: Graph--** graphToChartWith--SVG production via chart-svg--#+begin_src haskell :file other/exga.svg :results output graphics file :exports both-import Chart (writeChartOptions)-writeChartOptions "other/exga.svg" (graphToChart exGraphAugmented)-#+end_src--#+RESULTS:-[[file:other/exga.svg]]--* Development-** imports--#+begin_src haskell-ng :results output-:reload-:set -XOverloadedLabels-:set -XOverloadedStrings-:set -Wno-type-defaults-:set -Wno-x-partial-:set -XImportQualifiedPost-import Chart-import Optics.Core-import FlatParse.Basic qualified as FP-import qualified Data.ByteString as BS-import qualified Data.Text as Text-import qualified Data.ByteString.Char8 as Char8-import Algebra.Graph qualified as G-import Data.Monoid-import GHC.Exts-import DotParse-import DotParse.Examples-import DotParse.Examples.AST-import DotParse.Examples.NumHask-import DotParse.Examples.Base-import Data.Proxy-print "ok"-#+end_src--** testAll--Round-trip test--#+begin_src haskell :results output-testAll-#+end_src--#+RESULTS:-#+begin_example-ex0-ex1-ex2-ex3-ex4-ex5-ex6-ex7-ex8-ex9-ex10-ex11-ex12-ex13-ex14-ex15-#+end_example--* chart-svg AST--#+begin_src haskell-ng :results output-g1 = dotAST allSC componentEdges-BS.writeFile "other/ast.dot" $ dotPrint defaultDotConfig g1-#+end_src--#+begin_src sh :results output-dot other/ast.dot -Tsvg >other/ast.svg-#+end_src-
src/DotParse/Examples/NumHask.hs view
@@ -42,6 +42,7 @@   | Semiring   | Ring   | IntegralDomain+  | SemiField   | Field   | ExpField   | QuotientField@@ -77,7 +78,7 @@   }   deriving (Show, Eq, Ord) --- | List of all dependencies (as at v0.11)+-- | List of all dependencies (as at v0.12) dependencies :: [Dependency] dependencies =   [ Dependency Unital Magma,@@ -110,10 +111,11 @@     Dependency Ring Subtractive,     Dependency IntegralDomain Ring,     Dependency Field Ring,+    Dependency SemiField Distributive,+    Dependency SemiField Divisive,     Dependency Field Divisive,     Dependency ExpField Field,-    Dependency QuotientField Field,-    Dependency QuotientField Ring,+    Dependency QuotientField SemiField,     Dependency TrigField Field,     Dependency UpperBoundedField Field,     Dependency LowerBoundedField Field,@@ -122,7 +124,6 @@     Dependency SubtractiveAction Subtractive,     Dependency MultiplicativeAction Multiplicative,     Dependency DivisiveAction Divisive,-    Dependency Actions Distributive,     -- Lattice     Dependency JoinSemiLattice Associative,     Dependency JoinSemiLattice Commutative,@@ -142,7 +143,7 @@     Dependency Direction Distributive,     Dependency Epsilon Subtractive,     Dependency Epsilon MeetSemiLattice,-    Dependency Integral Ring,+    Dependency Integral Distributive,     Dependency Ratio Field   ] @@ -155,13 +156,13 @@     Divisive,     Distributive,     Ring,+    SemiField,     Field,     ExpField,     QuotientField,     TrigField,     Basis,     Direction,-    Actions,     Integral,     Ratio   ]@@ -173,9 +174,10 @@     (Subtractive, "NumHask-Algebra-Additive"),     (Multiplicative, "NumHask-Algebra-Multiplicative"),     (Divisive, "NumHask-Algebra-Multiplicative"),-    (Distributive, "NumHask-Algebra-Distributive"),+    (Distributive, "NumHask-Algebra-Ring"),     (Ring, "NumHask-Algebra-Ring"),     (Field, "NumHask-Algebra-Field"),+    (SemiField, "NumHask-Algebra-Field"),     (ExpField, "NumHask-Algebra-Field"),     (QuotientField, "NumHask-Algebra-Field"),     (TrigField, "NumHask-Algebra-Field"),
src/DotParse/FlatParse.hs view
@@ -52,6 +52,7 @@ import Prelude hiding (replicate)  -- $setup+-- >>> :set -XOverloadedStrings -- >>> import DotParse -- >>> import FlatParse.Basic 
+ test/doctests.hs view
@@ -0,0 +1,8 @@+module Main where++import System.Environment (getArgs)+import Test.DocTest (mainFromCabal)+import Prelude (IO, (=<<))++main :: IO ()+main = mainFromCabal "dotparse" =<< getArgs