diff --git a/bower.json b/bower.json
deleted file mode 100644
index c05887a..0000000
--- a/bower.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "name": "purescript-dotlang",
- "license": [
- "MIT"
- ],
- "repository": {
- "type": "git",
- "url": "https://github.com/csicar/purescript-dotlang.git"
- },
- "ignore": [
- "**/.*",
- "node_modules",
- "bower_components",
- "output"
- ],
- "dependencies": {
- "purescript-arrays": "^v6.0.0",
- "purescript-colors": "^v6.0.0",
- "purescript-console": "^v5.0.0",
- "purescript-effect": "^v3.0.0",
- "purescript-maybe": "^v5.0.0",
- "purescript-prelude": "^v5.0.0",
- "purescript-psci-support": "^v5.0.0",
- "purescript-strings": "^v5.0.0"
- }
-}
diff --git a/packages.dhall b/packages.dhall
deleted file mode 100644
index 5cc6725..0000000
--- a/packages.dhall
+++ /dev/null
@@ -1,5 +0,0 @@
-let upstream =
- https://github.com/purescript/package-sets/releases/download/psc-0.15.4-20221127/packages.dhall
- sha256:9619da55468363705b888350fdd38735a5e90dab101f8d9193057552c5efccad
-
-in upstream
\ No newline at end of file
diff --git a/spago.dhall b/spago.dhall
deleted file mode 100644
index a558029..0000000
--- a/spago.dhall
+++ /dev/null
@@ -1,17 +0,0 @@
-{ name = "dotlang"
-, license = "MIT"
-, repository = "https://github.com/csicar/purescript-dotlang.git"
-, dependencies =
- [ "arrays"
- , "colors"
- , "console"
- , "effect"
- , "maybe"
- , "prelude"
- , "psci-support"
- , "spec"
- , "strings"
- ]
-, packages = ./packages.dhall
-, sources = [ "src/**/*.purs" ]
-}
diff --git a/spago.lock b/spago.lock
new file mode 100644
index 0000000..a1e5f7f
--- /dev/null
+++ b/spago.lock
@@ -0,0 +1,1366 @@
+{
+ "workspace": {
+ "packages": {
+ "dotlang": {
+ "path": "./",
+ "core": {
+ "dependencies": [
+ "arrays",
+ "colors",
+ "console",
+ "effect",
+ "maybe",
+ "prelude",
+ "psci-support",
+ "strings"
+ ],
+ "build_plan": [
+ "arrays",
+ "bifunctors",
+ "colors",
+ "console",
+ "const",
+ "contravariant",
+ "control",
+ "distributive",
+ "effect",
+ "either",
+ "enums",
+ "exists",
+ "foldable-traversable",
+ "functions",
+ "functors",
+ "gen",
+ "identity",
+ "integers",
+ "invariant",
+ "lazy",
+ "lists",
+ "maybe",
+ "newtype",
+ "nonempty",
+ "numbers",
+ "orders",
+ "partial",
+ "prelude",
+ "profunctor",
+ "psci-support",
+ "refs",
+ "safe-coerce",
+ "st",
+ "strings",
+ "tailrec",
+ "tuples",
+ "type-equality",
+ "unfoldable",
+ "unsafe-coerce"
+ ]
+ },
+ "test": {
+ "dependencies": [
+ "spec"
+ ],
+ "build_plan": [
+ "aff",
+ "ansi",
+ "arrays",
+ "avar",
+ "bifunctors",
+ "catenable-lists",
+ "const",
+ "contravariant",
+ "control",
+ "datetime",
+ "distributive",
+ "effect",
+ "either",
+ "enums",
+ "exceptions",
+ "exists",
+ "foldable-traversable",
+ "fork",
+ "free",
+ "functions",
+ "functors",
+ "gen",
+ "identity",
+ "integers",
+ "invariant",
+ "lazy",
+ "lists",
+ "maybe",
+ "mmorph",
+ "newtype",
+ "nonempty",
+ "now",
+ "numbers",
+ "ordered-collections",
+ "orders",
+ "parallel",
+ "partial",
+ "pipes",
+ "prelude",
+ "profunctor",
+ "refs",
+ "safe-coerce",
+ "spec",
+ "st",
+ "strings",
+ "tailrec",
+ "transformers",
+ "tuples",
+ "type-equality",
+ "unfoldable",
+ "unsafe-coerce"
+ ]
+ }
+ }
+ },
+ "package_set": {
+ "address": {
+ "registry": "65.1.0"
+ },
+ "compiler": ">=0.15.15 <0.16.0",
+ "content": {
+ "abc-parser": "2.0.1",
+ "ace": "9.1.0",
+ "address-rfc2821": "0.1.1",
+ "aff": "8.0.0",
+ "aff-bus": "6.0.0",
+ "aff-coroutines": "9.0.0",
+ "aff-promise": "4.0.0",
+ "aff-retry": "2.0.0",
+ "affjax": "13.0.0",
+ "affjax-node": "1.0.0",
+ "affjax-web": "1.0.0",
+ "ansi": "7.0.0",
+ "apexcharts": "0.5.0",
+ "applicative-phases": "1.0.0",
+ "argonaut": "9.0.0",
+ "argonaut-aeson-generic": "0.4.1",
+ "argonaut-codecs": "9.1.0",
+ "argonaut-core": "7.0.0",
+ "argonaut-generic": "8.0.0",
+ "argonaut-traversals": "10.0.0",
+ "argparse-basic": "2.0.0",
+ "array-builder": "0.1.2",
+ "array-search": "0.6.0",
+ "arraybuffer": "13.2.0",
+ "arraybuffer-builder": "3.1.0",
+ "arraybuffer-types": "3.0.2",
+ "arrays": "7.3.0",
+ "arrays-extra": "0.6.1",
+ "arrays-zipper": "2.0.1",
+ "ask": "1.0.0",
+ "assert": "6.0.0",
+ "assert-multiple": "0.4.0",
+ "avar": "5.0.1",
+ "axon": "0.0.3",
+ "b64": "0.0.8",
+ "barbies": "1.0.1",
+ "barlow-lens": "0.9.0",
+ "benchlib": "0.0.4",
+ "bifunctors": "6.1.0",
+ "bigints": "7.0.1",
+ "bolson": "0.3.9",
+ "bookhound": "0.1.7",
+ "bower-json": "3.0.0",
+ "call-by-name": "4.0.1",
+ "canvas": "6.0.0",
+ "canvas-action": "9.0.0",
+ "cartesian": "1.0.6",
+ "catenable-lists": "7.0.0",
+ "cbor-stream": "1.3.0",
+ "chameleon": "1.0.0",
+ "chameleon-halogen": "1.0.3",
+ "chameleon-react-basic": "1.1.0",
+ "chameleon-styled": "2.5.0",
+ "chameleon-transformers": "1.0.0",
+ "channel": "1.0.0",
+ "checked-exceptions": "3.1.1",
+ "choku": "1.0.2",
+ "classless": "0.1.1",
+ "classless-arbitrary": "0.1.1",
+ "classless-decode-json": "0.1.1",
+ "classless-encode-json": "0.1.3",
+ "classnames": "2.0.0",
+ "codec": "6.1.0",
+ "codec-argonaut": "10.0.0",
+ "codec-json": "2.0.0",
+ "colors": "7.0.1",
+ "concur-core": "0.5.0",
+ "concur-react": "0.5.0",
+ "concurrent-queues": "3.0.0",
+ "console": "6.1.0",
+ "const": "6.0.0",
+ "contravariant": "6.0.0",
+ "control": "6.0.0",
+ "convertable-options": "1.0.0",
+ "coroutines": "7.0.0",
+ "css": "6.0.0",
+ "css-class-name-extractor": "0.0.4",
+ "css-frameworks": "1.0.1",
+ "csv-stream": "2.3.0",
+ "data-mvc": "0.0.2",
+ "datetime": "6.1.0",
+ "datetime-parsing": "0.2.0",
+ "debounce": "0.1.0",
+ "debug": "6.0.2",
+ "decimals": "7.1.0",
+ "default-values": "1.0.1",
+ "deku": "0.9.23",
+ "deno": "0.0.5",
+ "dissect": "1.0.0",
+ "distributive": "6.0.0",
+ "dodo-printer": "2.2.3",
+ "dom-filereader": "7.0.0",
+ "dom-indexed": "13.0.0",
+ "dom-simple": "0.4.0",
+ "dotenv": "4.0.3",
+ "droplet": "0.6.0",
+ "dts": "1.0.0",
+ "dual-numbers": "1.0.3",
+ "dynamic-buffer": "3.0.1",
+ "echarts-simple": "0.0.1",
+ "effect": "4.0.0",
+ "either": "6.1.0",
+ "elmish": "0.13.0",
+ "elmish-enzyme": "0.1.1",
+ "elmish-hooks": "0.10.3",
+ "elmish-html": "0.9.0",
+ "elmish-testing-library": "0.3.2",
+ "email-validate": "7.0.0",
+ "encoding": "0.0.9",
+ "enums": "6.0.1",
+ "env-names": "0.4.0",
+ "error": "2.0.0",
+ "eta-conversion": "0.3.2",
+ "exceptions": "6.1.0",
+ "exists": "6.0.0",
+ "exitcodes": "4.0.0",
+ "expect-inferred": "3.0.0",
+ "express": "0.9.1",
+ "ezfetch": "1.1.1",
+ "fahrtwind": "2.0.0",
+ "fakerjs": "0.0.1",
+ "fallback": "0.1.0",
+ "fast-vect": "1.2.0",
+ "fetch": "4.1.0",
+ "fetch-argonaut": "1.0.1",
+ "fetch-core": "5.1.0",
+ "fetch-yoga-json": "1.1.0",
+ "ffi-simple": "0.5.1",
+ "fft": "0.3.0",
+ "fft-js": "0.1.0",
+ "filterable": "5.0.0",
+ "fix-functor": "0.1.0",
+ "fixed-points": "7.0.0",
+ "fixed-precision": "5.0.0",
+ "flame": "1.4.0",
+ "float32": "2.0.0",
+ "fmt": "0.2.1",
+ "foldable-traversable": "6.0.0",
+ "foldable-traversable-extra": "0.0.6",
+ "foreign": "7.0.0",
+ "foreign-object": "4.1.0",
+ "foreign-readwrite": "3.4.0",
+ "forgetmenot": "0.1.0",
+ "fork": "6.0.0",
+ "form-urlencoded": "7.0.0",
+ "formatters": "7.0.0",
+ "framer-motion": "1.0.1",
+ "free": "7.1.0",
+ "freeap": "7.0.0",
+ "freer-free": "0.0.1",
+ "freet": "7.0.0",
+ "functions": "6.0.0",
+ "functor1": "3.0.0",
+ "functors": "5.0.0",
+ "fuzzy": "0.4.0",
+ "gen": "4.0.0",
+ "generate-values": "1.0.1",
+ "generic-router": "0.0.1",
+ "geojson": "0.0.5",
+ "geometria": "2.2.0",
+ "gesso": "1.0.0",
+ "gojs": "0.1.1",
+ "golem-fetch": "0.1.0",
+ "grain": "3.0.0",
+ "grain-router": "3.0.0",
+ "grain-virtualized": "3.0.0",
+ "graphs": "8.1.0",
+ "group": "4.1.1",
+ "halogen": "7.0.0",
+ "halogen-bootstrap5": "5.3.2",
+ "halogen-canvas": "1.0.0",
+ "halogen-css": "10.0.0",
+ "halogen-declarative-canvas": "0.0.8",
+ "halogen-echarts-simple": "0.0.4",
+ "halogen-formless": "4.0.3",
+ "halogen-helix": "1.1.0",
+ "halogen-hooks": "0.6.3",
+ "halogen-hooks-extra": "0.9.0",
+ "halogen-infinite-scroll": "1.1.0",
+ "halogen-store": "0.5.4",
+ "halogen-storybook": "2.0.0",
+ "halogen-subscriptions": "2.0.0",
+ "halogen-svg-elems": "8.0.0",
+ "halogen-typewriter": "1.0.4",
+ "halogen-use-trigger-hooks": "1.0.0",
+ "halogen-vdom": "8.0.0",
+ "halogen-vdom-string-renderer": "0.5.0",
+ "halogen-xterm": "2.0.0",
+ "heckin": "2.0.1",
+ "heterogeneous": "0.7.0",
+ "homogeneous": "0.4.0",
+ "http-methods": "6.0.0",
+ "httpurple": "4.0.0",
+ "huffman": "0.4.0",
+ "humdrum": "0.0.1",
+ "hyrule": "2.3.8",
+ "identity": "6.0.0",
+ "identy": "4.0.1",
+ "indexed-db": "1.0.0",
+ "indexed-monad": "3.0.0",
+ "int64": "3.0.0",
+ "integers": "6.0.0",
+ "interpolate": "5.0.2",
+ "intersection-observer": "1.0.1",
+ "invariant": "6.0.0",
+ "jarilo": "1.0.1",
+ "jelly": "0.10.0",
+ "jelly-router": "0.3.0",
+ "jelly-signal": "0.4.0",
+ "jest": "1.0.0",
+ "js-abort-controller": "1.0.0",
+ "js-bigints": "2.2.1",
+ "js-date": "8.0.0",
+ "js-fetch": "0.2.1",
+ "js-fileio": "3.0.0",
+ "js-intl": "1.1.4",
+ "js-iterators": "0.1.1",
+ "js-maps": "0.1.2",
+ "js-promise": "1.0.0",
+ "js-promise-aff": "1.0.0",
+ "js-timers": "6.1.0",
+ "js-uri": "3.1.0",
+ "jsdom": "1.0.0",
+ "json": "1.1.0",
+ "json-codecs": "5.0.0",
+ "justifill": "0.5.0",
+ "jwt": "0.0.9",
+ "labeled-data": "0.2.0",
+ "language-cst-parser": "0.14.1",
+ "lazy": "6.0.0",
+ "lazy-joe": "1.0.0",
+ "lcg": "4.0.0",
+ "leibniz": "5.0.0",
+ "leveldb": "1.0.1",
+ "liminal": "1.0.1",
+ "linalg": "6.0.0",
+ "lists": "7.0.0",
+ "literals": "1.0.2",
+ "logging": "3.0.0",
+ "logging-journald": "0.4.0",
+ "lumi-components": "18.0.0",
+ "machines": "7.0.0",
+ "maps-eager": "0.5.0",
+ "marionette": "1.0.0",
+ "marionette-react-basic-hooks": "0.1.1",
+ "marked": "0.1.0",
+ "matrices": "5.0.1",
+ "matryoshka": "1.0.0",
+ "maybe": "6.0.0",
+ "media-types": "6.0.0",
+ "meowclient": "1.0.0",
+ "midi": "4.0.0",
+ "milkis": "9.0.0",
+ "mimetype": "0.0.1",
+ "minibench": "4.0.1",
+ "mmorph": "7.0.0",
+ "monad-control": "5.0.0",
+ "monad-logger": "1.3.1",
+ "monad-loops": "0.5.0",
+ "monad-unlift": "1.0.1",
+ "monoid-extras": "0.0.1",
+ "monoidal": "0.16.0",
+ "morello": "0.4.0",
+ "mote": "3.0.0",
+ "motsunabe": "2.0.0",
+ "mvc": "0.0.1",
+ "mysql": "6.0.1",
+ "n3": "0.1.0",
+ "nano-id": "1.1.0",
+ "nanoid": "0.1.0",
+ "naturals": "3.0.0",
+ "nested-functor": "0.2.1",
+ "newtype": "5.0.0",
+ "nextjs": "0.1.1",
+ "nextui": "0.2.0",
+ "node-buffer": "9.0.0",
+ "node-child-process": "11.1.0",
+ "node-event-emitter": "3.0.0",
+ "node-execa": "5.0.0",
+ "node-fs": "9.2.0",
+ "node-glob-basic": "2.0.0",
+ "node-http": "9.1.0",
+ "node-http2": "1.1.1",
+ "node-human-signals": "1.0.0",
+ "node-net": "5.1.0",
+ "node-os": "5.1.0",
+ "node-path": "5.0.1",
+ "node-process": "11.2.0",
+ "node-readline": "8.1.1",
+ "node-sqlite3": "8.0.0",
+ "node-stream-pipes": "2.1.6",
+ "node-streams": "9.0.1",
+ "node-tls": "0.3.1",
+ "node-url": "7.0.1",
+ "node-workerbees": "0.3.1",
+ "node-zlib": "0.4.0",
+ "nonempty": "7.0.0",
+ "now": "6.0.0",
+ "npm-package-json": "2.0.0",
+ "nullable": "6.0.0",
+ "numberfield": "0.2.2",
+ "numbers": "9.0.1",
+ "oak": "3.1.1",
+ "oak-debug": "1.2.2",
+ "object-maps": "0.3.0",
+ "ocarina": "1.5.4",
+ "oooooooooorrrrrrrmm-lib": "0.0.1",
+ "open-colors-scales-and-schemes": "1.0.0",
+ "open-folds": "6.4.0",
+ "open-foreign-generic": "11.0.3",
+ "open-memoize": "6.2.0",
+ "open-mkdirp-aff": "1.2.0",
+ "open-pairing": "6.2.0",
+ "open-smolder": "12.0.2",
+ "options": "7.0.0",
+ "optparse": "5.0.1",
+ "ordered-collections": "3.2.0",
+ "ordered-set": "0.4.0",
+ "orders": "6.0.0",
+ "owoify": "1.2.0",
+ "pairs": "9.0.1",
+ "parallel": "7.0.0",
+ "parsing": "10.3.0",
+ "parsing-dataview": "3.2.4",
+ "partial": "4.0.0",
+ "pathy": "9.0.0",
+ "pha": "0.13.0",
+ "phaser": "0.7.0",
+ "phylio": "1.1.2",
+ "pipes": "8.0.0",
+ "pirates-charm": "0.0.1",
+ "pmock": "0.9.0",
+ "point-free": "1.0.0",
+ "pointed-list": "0.5.1",
+ "polymorphic-vectors": "4.0.0",
+ "posix-types": "6.0.0",
+ "postgresql": "2.0.20",
+ "precise": "6.0.0",
+ "precise-datetime": "7.0.0",
+ "prelude": "6.0.2",
+ "prettier-printer": "3.0.0",
+ "printf": "0.1.0",
+ "priority-queue": "0.1.2",
+ "profunctor": "6.0.1",
+ "profunctor-lenses": "8.0.0",
+ "protobuf": "4.4.0",
+ "psa-utils": "8.0.0",
+ "psci-support": "6.0.0",
+ "punycode": "1.0.0",
+ "qualified-do": "2.2.0",
+ "quantities": "12.2.0",
+ "quickcheck": "8.0.1",
+ "quickcheck-combinators": "0.1.3",
+ "quickcheck-laws": "7.0.0",
+ "quickcheck-utf8": "0.0.0",
+ "random": "6.0.0",
+ "rationals": "6.0.0",
+ "rdf": "0.1.0",
+ "react": "11.0.0",
+ "react-aria": "0.2.0",
+ "react-basic": "17.0.0",
+ "react-basic-classic": "3.0.0",
+ "react-basic-dnd": "10.1.0",
+ "react-basic-dom": "7.0.0",
+ "react-basic-dom-beta": "0.1.1",
+ "react-basic-emotion": "7.1.0",
+ "react-basic-hooks": "8.2.0",
+ "react-basic-storybook": "2.0.0",
+ "react-dom": "8.0.0",
+ "react-halo": "3.0.0",
+ "react-icons": "1.1.5",
+ "react-markdown": "0.1.0",
+ "react-testing-library": "4.0.1",
+ "react-virtuoso": "1.0.0",
+ "reactix": "0.6.1",
+ "read": "1.0.1",
+ "recharts": "1.1.0",
+ "record": "4.0.0",
+ "record-extra": "5.0.1",
+ "record-extra-srghma": "0.2.8",
+ "record-ptional-fields": "0.1.2",
+ "record-studio": "1.0.4",
+ "refs": "6.0.0",
+ "remotedata": "5.0.1",
+ "repr": "0.5.0",
+ "resize-arrays": "0.0.1",
+ "resize-observer": "1.0.0",
+ "resource": "2.0.1",
+ "resourcet": "1.0.0",
+ "result": "1.0.3",
+ "return": "0.2.0",
+ "ring-modules": "5.0.1",
+ "rito": "0.3.4",
+ "roman": "0.4.0",
+ "rough-notation": "1.0.2",
+ "routing": "11.0.0",
+ "routing-duplex": "0.7.0",
+ "run": "5.0.0",
+ "safe-coerce": "2.0.0",
+ "safely": "4.0.1",
+ "school-of-music": "1.3.0",
+ "selection-foldable": "0.2.0",
+ "selective-functors": "1.0.1",
+ "semirings": "7.0.0",
+ "shuffle": "1.1.0",
+ "signal": "13.0.0",
+ "simple-emitter": "3.0.1",
+ "simple-i18n": "2.0.1",
+ "simple-json": "9.0.0",
+ "simple-json-generics": "0.2.1",
+ "simple-ulid": "3.0.0",
+ "sized-matrices": "1.0.0",
+ "sized-vectors": "5.0.2",
+ "slug": "3.1.0",
+ "small-ffi": "4.0.1",
+ "soundfonts": "4.1.0",
+ "sparse-matrices": "2.0.1",
+ "sparse-polynomials": "3.0.1",
+ "spec": "8.1.1",
+ "spec-discovery": "8.4.0",
+ "spec-mocha": "5.1.1",
+ "spec-node": "0.0.3",
+ "spec-quickcheck": "5.0.2",
+ "spec-reporter-xunit": "0.7.1",
+ "splitmix": "2.1.0",
+ "ssrs": "1.0.0",
+ "st": "6.2.0",
+ "statistics": "0.3.2",
+ "strictlypositiveint": "1.0.1",
+ "string-parsers": "8.0.0",
+ "strings": "6.0.1",
+ "strings-extra": "4.0.0",
+ "stringutils": "0.0.12",
+ "substitute": "0.2.3",
+ "supply": "0.2.0",
+ "svg-parser": "3.0.0",
+ "systemd-journald": "0.3.0",
+ "tagged": "4.0.2",
+ "tailrec": "6.1.0",
+ "tanstack-query": "2.0.0",
+ "tecton": "0.2.1",
+ "tecton-halogen": "0.2.0",
+ "test-unit": "17.0.0",
+ "thermite": "6.3.1",
+ "thermite-dom": "0.3.1",
+ "these": "6.0.0",
+ "threading": "0.0.3",
+ "tidy": "0.11.1",
+ "tidy-codegen": "4.0.1",
+ "tldr": "0.0.0",
+ "toestand": "0.9.0",
+ "transformation-matrix": "1.0.1",
+ "transformers": "6.1.0",
+ "tree-rose": "4.0.2",
+ "trivial-unfold": "0.5.0",
+ "ts-bridge": "4.0.0",
+ "tuples": "7.0.0",
+ "two-or-more": "1.0.0",
+ "type-equality": "4.0.1",
+ "typedenv": "2.0.1",
+ "typelevel": "6.0.0",
+ "typelevel-lists": "2.1.0",
+ "typelevel-peano": "1.0.1",
+ "typelevel-prelude": "7.0.0",
+ "typelevel-regex": "0.0.3",
+ "typelevel-rows": "0.1.0",
+ "typisch": "0.4.0",
+ "uint": "7.0.0",
+ "ulid": "3.0.1",
+ "uncurried-transformers": "1.1.0",
+ "undefined": "2.0.0",
+ "undefined-is-not-a-problem": "1.1.0",
+ "unfoldable": "6.0.0",
+ "unicode": "6.0.0",
+ "unique": "0.6.1",
+ "unlift": "1.0.1",
+ "unordered-collections": "3.1.0",
+ "unsafe-coerce": "6.0.0",
+ "unsafe-reference": "5.0.0",
+ "untagged-to-tagged": "0.1.4",
+ "untagged-union": "1.0.0",
+ "uri": "9.0.0",
+ "url-immutable": "1.0.0",
+ "url-regex-safe": "0.1.1",
+ "uuid": "9.0.0",
+ "uuidv4": "1.0.0",
+ "validation": "6.0.0",
+ "variant": "8.0.0",
+ "variant-encodings": "2.0.0",
+ "variant-gen": "1.0.0",
+ "vectorfield": "1.0.1",
+ "vectors": "2.1.0",
+ "versions": "7.0.0",
+ "visx": "0.0.2",
+ "vitest": "1.0.0",
+ "web-clipboard": "6.0.0",
+ "web-cssom": "2.0.0",
+ "web-cssom-view": "0.1.0",
+ "web-dom": "6.0.0",
+ "web-dom-parser": "8.0.0",
+ "web-dom-xpath": "3.0.0",
+ "web-encoding": "3.0.0",
+ "web-events": "4.0.0",
+ "web-fetch": "4.0.1",
+ "web-file": "4.0.0",
+ "web-geometry": "0.1.0",
+ "web-html": "4.1.0",
+ "web-pointerevents": "2.0.0",
+ "web-proletarian": "1.0.0",
+ "web-promise": "3.2.0",
+ "web-resize-observer": "2.1.0",
+ "web-router": "1.0.0",
+ "web-socket": "4.0.0",
+ "web-storage": "5.0.0",
+ "web-streams": "4.0.0",
+ "web-touchevents": "4.0.0",
+ "web-uievents": "5.0.0",
+ "web-url": "2.0.0",
+ "web-workers": "1.1.0",
+ "web-xhr": "5.0.1",
+ "webextension-polyfill": "0.1.0",
+ "webgpu": "0.0.1",
+ "which": "2.0.0",
+ "whine-core": "0.0.32",
+ "xterm": "1.0.0",
+ "yoga-fetch": "1.0.1",
+ "yoga-json": "5.1.0",
+ "yoga-om": "0.1.0",
+ "yoga-postgres": "6.0.0",
+ "yoga-react-dom": "1.0.1",
+ "yoga-subtlecrypto": "0.1.0",
+ "yoga-tree": "1.0.0",
+ "z3": "0.0.2",
+ "zipperarray": "2.0.0"
+ }
+ },
+ "extra_packages": {}
+ },
+ "packages": {
+ "aff": {
+ "type": "registry",
+ "version": "8.0.0",
+ "integrity": "sha256-5MmdI4+0RHBtSBy+YlU3/Cq4R5W2ih3OaRedJIrVHdk=",
+ "dependencies": [
+ "bifunctors",
+ "control",
+ "datetime",
+ "effect",
+ "either",
+ "exceptions",
+ "foldable-traversable",
+ "functions",
+ "maybe",
+ "newtype",
+ "parallel",
+ "prelude",
+ "refs",
+ "tailrec",
+ "transformers",
+ "unsafe-coerce"
+ ]
+ },
+ "ansi": {
+ "type": "registry",
+ "version": "7.0.0",
+ "integrity": "sha256-ZMB6HD+q9CXvn9fRCmJ8dvuDrOVHcjombL3oNOerVnE=",
+ "dependencies": [
+ "foldable-traversable",
+ "lists",
+ "strings"
+ ]
+ },
+ "arrays": {
+ "type": "registry",
+ "version": "7.3.0",
+ "integrity": "sha256-tmcklBlc/muUtUfr9RapdCPwnlQeB3aSrC4dK85gQlc=",
+ "dependencies": [
+ "bifunctors",
+ "control",
+ "foldable-traversable",
+ "functions",
+ "maybe",
+ "nonempty",
+ "partial",
+ "prelude",
+ "safe-coerce",
+ "st",
+ "tailrec",
+ "tuples",
+ "unfoldable",
+ "unsafe-coerce"
+ ]
+ },
+ "avar": {
+ "type": "registry",
+ "version": "5.0.1",
+ "integrity": "sha256-f+bRR3qQPa/GVe4UbLQiJBy7+PzJkUCwT6qNn0UlkMY=",
+ "dependencies": [
+ "aff",
+ "effect",
+ "either",
+ "exceptions",
+ "functions",
+ "maybe"
+ ]
+ },
+ "bifunctors": {
+ "type": "registry",
+ "version": "6.1.0",
+ "integrity": "sha256-6enQzl1vqnFTQZ1WX9BnoOOVdPGO9WZvVXldHckVQvY=",
+ "dependencies": [
+ "const",
+ "either",
+ "newtype",
+ "prelude",
+ "tuples"
+ ]
+ },
+ "catenable-lists": {
+ "type": "registry",
+ "version": "7.0.0",
+ "integrity": "sha256-76vYENhwF4BWTBsjeLuErCH2jqVT4M3R1HX+4RwSftA=",
+ "dependencies": [
+ "control",
+ "foldable-traversable",
+ "lists",
+ "maybe",
+ "prelude",
+ "tuples",
+ "unfoldable"
+ ]
+ },
+ "colors": {
+ "type": "registry",
+ "version": "7.0.1",
+ "integrity": "sha256-udlg/y2PFsHYli8Tgz8BQGGrOjyGo0BcJj36IfgYADs=",
+ "dependencies": [
+ "arrays",
+ "integers",
+ "lists",
+ "numbers",
+ "partial",
+ "strings"
+ ]
+ },
+ "console": {
+ "type": "registry",
+ "version": "6.1.0",
+ "integrity": "sha256-CxmAzjgyuGDmt9FZW51VhV6rBPwR6o0YeKUzA9rSzcM=",
+ "dependencies": [
+ "effect",
+ "prelude"
+ ]
+ },
+ "const": {
+ "type": "registry",
+ "version": "6.0.0",
+ "integrity": "sha256-tNrxDW8D8H4jdHE2HiPzpLy08zkzJMmGHdRqt5BQuTc=",
+ "dependencies": [
+ "invariant",
+ "newtype",
+ "prelude"
+ ]
+ },
+ "contravariant": {
+ "type": "registry",
+ "version": "6.0.0",
+ "integrity": "sha256-TP+ooAp3vvmdjfQsQJSichF5B4BPDHp3wAJoWchip6c=",
+ "dependencies": [
+ "const",
+ "either",
+ "newtype",
+ "prelude",
+ "tuples"
+ ]
+ },
+ "control": {
+ "type": "registry",
+ "version": "6.0.0",
+ "integrity": "sha256-sH7Pg9E96JCPF9PIA6oQ8+BjTyO/BH1ZuE/bOcyj4Jk=",
+ "dependencies": [
+ "newtype",
+ "prelude"
+ ]
+ },
+ "datetime": {
+ "type": "registry",
+ "version": "6.1.0",
+ "integrity": "sha256-g/5X5BBegQWLpI9IWD+sY6mcaYpzzlW5lz5NBzaMtyI=",
+ "dependencies": [
+ "bifunctors",
+ "control",
+ "either",
+ "enums",
+ "foldable-traversable",
+ "functions",
+ "gen",
+ "integers",
+ "lists",
+ "maybe",
+ "newtype",
+ "numbers",
+ "ordered-collections",
+ "partial",
+ "prelude",
+ "tuples"
+ ]
+ },
+ "distributive": {
+ "type": "registry",
+ "version": "6.0.0",
+ "integrity": "sha256-HTDdmEnzigMl+02SJB88j+gAXDx9VKsbvR4MJGDPbOQ=",
+ "dependencies": [
+ "identity",
+ "newtype",
+ "prelude",
+ "tuples",
+ "type-equality"
+ ]
+ },
+ "effect": {
+ "type": "registry",
+ "version": "4.0.0",
+ "integrity": "sha256-eBtZu+HZcMa5HilvI6kaDyVX3ji8p0W9MGKy2K4T6+M=",
+ "dependencies": [
+ "prelude"
+ ]
+ },
+ "either": {
+ "type": "registry",
+ "version": "6.1.0",
+ "integrity": "sha256-6hgTPisnMWVwQivOu2PKYcH8uqjEOOqDyaDQVUchTpY=",
+ "dependencies": [
+ "control",
+ "invariant",
+ "maybe",
+ "prelude"
+ ]
+ },
+ "enums": {
+ "type": "registry",
+ "version": "6.0.1",
+ "integrity": "sha256-HWaD73JFLorc4A6trKIRUeDMdzE+GpkJaEOM1nTNkC8=",
+ "dependencies": [
+ "control",
+ "either",
+ "gen",
+ "maybe",
+ "newtype",
+ "nonempty",
+ "partial",
+ "prelude",
+ "tuples",
+ "unfoldable"
+ ]
+ },
+ "exceptions": {
+ "type": "registry",
+ "version": "6.1.0",
+ "integrity": "sha256-K0T89IHtF3vBY7eSAO7eDOqSb2J9kZGAcDN5+IKsF8E=",
+ "dependencies": [
+ "effect",
+ "either",
+ "maybe",
+ "prelude"
+ ]
+ },
+ "exists": {
+ "type": "registry",
+ "version": "6.0.0",
+ "integrity": "sha256-A0JQHpTfo1dNOj9U5/Fd3xndlRSE0g2IQWOGor2yXn8=",
+ "dependencies": [
+ "unsafe-coerce"
+ ]
+ },
+ "foldable-traversable": {
+ "type": "registry",
+ "version": "6.0.0",
+ "integrity": "sha256-fLeqRYM4jUrZD5H4WqcwUgzU7XfYkzO4zhgtNc3jcWM=",
+ "dependencies": [
+ "bifunctors",
+ "const",
+ "control",
+ "either",
+ "functors",
+ "identity",
+ "maybe",
+ "newtype",
+ "orders",
+ "prelude",
+ "tuples"
+ ]
+ },
+ "fork": {
+ "type": "registry",
+ "version": "6.0.0",
+ "integrity": "sha256-X7u0SuCvFbLbzuNEKLBNuWjmcroqMqit4xEzpQwAP7E=",
+ "dependencies": [
+ "aff"
+ ]
+ },
+ "free": {
+ "type": "registry",
+ "version": "7.1.0",
+ "integrity": "sha256-JAumgEsGSzJCNLD8AaFvuX7CpqS5yruCngi6yI7+V5k=",
+ "dependencies": [
+ "catenable-lists",
+ "control",
+ "distributive",
+ "either",
+ "exists",
+ "foldable-traversable",
+ "invariant",
+ "lazy",
+ "maybe",
+ "prelude",
+ "tailrec",
+ "transformers",
+ "tuples",
+ "unsafe-coerce"
+ ]
+ },
+ "functions": {
+ "type": "registry",
+ "version": "6.0.0",
+ "integrity": "sha256-adMyJNEnhGde2unHHAP79gPtlNjNqzgLB8arEOn9hLI=",
+ "dependencies": [
+ "prelude"
+ ]
+ },
+ "functors": {
+ "type": "registry",
+ "version": "5.0.0",
+ "integrity": "sha256-zfPWWYisbD84MqwpJSZFlvM6v86McM68ob8p9s27ywU=",
+ "dependencies": [
+ "bifunctors",
+ "const",
+ "contravariant",
+ "control",
+ "distributive",
+ "either",
+ "invariant",
+ "maybe",
+ "newtype",
+ "prelude",
+ "profunctor",
+ "tuples",
+ "unsafe-coerce"
+ ]
+ },
+ "gen": {
+ "type": "registry",
+ "version": "4.0.0",
+ "integrity": "sha256-f7yzAXWwr+xnaqEOcvyO3ezKdoes8+WXWdXIHDBCAPI=",
+ "dependencies": [
+ "either",
+ "foldable-traversable",
+ "identity",
+ "maybe",
+ "newtype",
+ "nonempty",
+ "prelude",
+ "tailrec",
+ "tuples",
+ "unfoldable"
+ ]
+ },
+ "identity": {
+ "type": "registry",
+ "version": "6.0.0",
+ "integrity": "sha256-4wY0XZbAksjY6UAg99WkuKyJlQlWAfTi2ssadH0wVMY=",
+ "dependencies": [
+ "control",
+ "invariant",
+ "newtype",
+ "prelude"
+ ]
+ },
+ "integers": {
+ "type": "registry",
+ "version": "6.0.0",
+ "integrity": "sha256-sf+sK26R1hzwl3NhXR7WAu9zCDjQnfoXwcyGoseX158=",
+ "dependencies": [
+ "maybe",
+ "numbers",
+ "prelude"
+ ]
+ },
+ "invariant": {
+ "type": "registry",
+ "version": "6.0.0",
+ "integrity": "sha256-RGWWyYrz0Hs1KjPDA+87Kia67ZFBhfJ5lMGOMCEFoLo=",
+ "dependencies": [
+ "control",
+ "prelude"
+ ]
+ },
+ "lazy": {
+ "type": "registry",
+ "version": "6.0.0",
+ "integrity": "sha256-lMsfFOnlqfe4KzRRiW8ot5ge6HtcU3Eyh2XkXcP5IgU=",
+ "dependencies": [
+ "control",
+ "foldable-traversable",
+ "invariant",
+ "prelude"
+ ]
+ },
+ "lists": {
+ "type": "registry",
+ "version": "7.0.0",
+ "integrity": "sha256-EKF15qYqucuXP2lT/xPxhqy58f0FFT6KHdIB/yBOayI=",
+ "dependencies": [
+ "bifunctors",
+ "control",
+ "foldable-traversable",
+ "lazy",
+ "maybe",
+ "newtype",
+ "nonempty",
+ "partial",
+ "prelude",
+ "tailrec",
+ "tuples",
+ "unfoldable"
+ ]
+ },
+ "maybe": {
+ "type": "registry",
+ "version": "6.0.0",
+ "integrity": "sha256-5cCIb0wPwbat2PRkQhUeZO0jcAmf8jCt2qE0wbC3v2Q=",
+ "dependencies": [
+ "control",
+ "invariant",
+ "newtype",
+ "prelude"
+ ]
+ },
+ "mmorph": {
+ "type": "registry",
+ "version": "7.0.0",
+ "integrity": "sha256-urZlZNNqGeQFe5D/ClHlR8QgGBNHTMFPtJ5S5IpflTQ=",
+ "dependencies": [
+ "free",
+ "functors",
+ "transformers"
+ ]
+ },
+ "newtype": {
+ "type": "registry",
+ "version": "5.0.0",
+ "integrity": "sha256-gdrQu8oGe9eZE6L3wOI8ql/igOg+zEGB5ITh2g+uttw=",
+ "dependencies": [
+ "prelude",
+ "safe-coerce"
+ ]
+ },
+ "nonempty": {
+ "type": "registry",
+ "version": "7.0.0",
+ "integrity": "sha256-54ablJZUHGvvlTJzi3oXyPCuvY6zsrWJuH/dMJ/MFLs=",
+ "dependencies": [
+ "control",
+ "foldable-traversable",
+ "maybe",
+ "prelude",
+ "tuples",
+ "unfoldable"
+ ]
+ },
+ "now": {
+ "type": "registry",
+ "version": "6.0.0",
+ "integrity": "sha256-xZ7x37ZMREfs6GCDw/h+FaKHV/3sPWmtqBZRGTxybQY=",
+ "dependencies": [
+ "datetime",
+ "effect"
+ ]
+ },
+ "numbers": {
+ "type": "registry",
+ "version": "9.0.1",
+ "integrity": "sha256-/9M6aeMDBdB4cwYDeJvLFprAHZ49EbtKQLIJsneXLIk=",
+ "dependencies": [
+ "functions",
+ "maybe"
+ ]
+ },
+ "ordered-collections": {
+ "type": "registry",
+ "version": "3.2.0",
+ "integrity": "sha256-o9jqsj5rpJmMdoe/zyufWHFjYYFTTsJpgcuCnqCO6PM=",
+ "dependencies": [
+ "arrays",
+ "foldable-traversable",
+ "gen",
+ "lists",
+ "maybe",
+ "partial",
+ "prelude",
+ "st",
+ "tailrec",
+ "tuples",
+ "unfoldable"
+ ]
+ },
+ "orders": {
+ "type": "registry",
+ "version": "6.0.0",
+ "integrity": "sha256-nBA0g3/ai0euH8q9pSbGqk53W2q6agm/dECZTHcoink=",
+ "dependencies": [
+ "newtype",
+ "prelude"
+ ]
+ },
+ "parallel": {
+ "type": "registry",
+ "version": "7.0.0",
+ "integrity": "sha256-gUC9i4Txnx9K9RcMLsjujbwZz6BB1bnE2MLvw4GIw5o=",
+ "dependencies": [
+ "control",
+ "effect",
+ "either",
+ "foldable-traversable",
+ "functors",
+ "maybe",
+ "newtype",
+ "prelude",
+ "profunctor",
+ "refs",
+ "transformers"
+ ]
+ },
+ "partial": {
+ "type": "registry",
+ "version": "4.0.0",
+ "integrity": "sha256-fwXerld6Xw1VkReh8yeQsdtLVrjfGiVuC5bA1Wyo/J4=",
+ "dependencies": []
+ },
+ "pipes": {
+ "type": "registry",
+ "version": "8.0.0",
+ "integrity": "sha256-kvfqGM4cPA/wCcBHbp5psouFw5dZGvku2462x7ZBwSY=",
+ "dependencies": [
+ "aff",
+ "lists",
+ "mmorph",
+ "prelude",
+ "tailrec",
+ "transformers",
+ "tuples"
+ ]
+ },
+ "prelude": {
+ "type": "registry",
+ "version": "6.0.2",
+ "integrity": "sha256-kiAPZxihtAel8uRiTNdccf4qylp/9J3jNkEHNAD0MsE=",
+ "dependencies": []
+ },
+ "profunctor": {
+ "type": "registry",
+ "version": "6.0.1",
+ "integrity": "sha256-E58hSYdJvF2Qjf9dnWLPlJKh2Z2fLfFLkQoYi16vsFk=",
+ "dependencies": [
+ "control",
+ "distributive",
+ "either",
+ "exists",
+ "invariant",
+ "newtype",
+ "prelude",
+ "tuples"
+ ]
+ },
+ "psci-support": {
+ "type": "registry",
+ "version": "6.0.0",
+ "integrity": "sha256-C6ql4P9TEP06hft/1Z5QumPA4yARR4VIxDdhmL1EO+Y=",
+ "dependencies": [
+ "console",
+ "effect",
+ "prelude"
+ ]
+ },
+ "refs": {
+ "type": "registry",
+ "version": "6.0.0",
+ "integrity": "sha256-Vgwne7jIbD3ZMoLNNETLT8Litw6lIYo3MfYNdtYWj9s=",
+ "dependencies": [
+ "effect",
+ "prelude"
+ ]
+ },
+ "safe-coerce": {
+ "type": "registry",
+ "version": "2.0.0",
+ "integrity": "sha256-a1ibQkiUcbODbLE/WAq7Ttbbh9ex+x33VCQ7GngKudU=",
+ "dependencies": [
+ "unsafe-coerce"
+ ]
+ },
+ "spec": {
+ "type": "registry",
+ "version": "8.1.1",
+ "integrity": "sha256-EM7UfQIaSgiw13LJ4ZASkfYmmRDKIlec3nYbGKFqGhk=",
+ "dependencies": [
+ "aff",
+ "ansi",
+ "arrays",
+ "avar",
+ "bifunctors",
+ "control",
+ "datetime",
+ "effect",
+ "either",
+ "exceptions",
+ "foldable-traversable",
+ "fork",
+ "identity",
+ "integers",
+ "lists",
+ "maybe",
+ "newtype",
+ "now",
+ "ordered-collections",
+ "parallel",
+ "pipes",
+ "prelude",
+ "refs",
+ "strings",
+ "tailrec",
+ "transformers",
+ "tuples"
+ ]
+ },
+ "st": {
+ "type": "registry",
+ "version": "6.2.0",
+ "integrity": "sha256-z9X0WsOUlPwNx9GlCC+YccCyz8MejC8Wb0C4+9fiBRY=",
+ "dependencies": [
+ "partial",
+ "prelude",
+ "tailrec",
+ "unsafe-coerce"
+ ]
+ },
+ "strings": {
+ "type": "registry",
+ "version": "6.0.1",
+ "integrity": "sha256-WssD3DbX4OPzxSdjvRMX0yvc9+pS7n5gyPv5I2Trb7k=",
+ "dependencies": [
+ "arrays",
+ "control",
+ "either",
+ "enums",
+ "foldable-traversable",
+ "gen",
+ "integers",
+ "maybe",
+ "newtype",
+ "nonempty",
+ "partial",
+ "prelude",
+ "tailrec",
+ "tuples",
+ "unfoldable",
+ "unsafe-coerce"
+ ]
+ },
+ "tailrec": {
+ "type": "registry",
+ "version": "6.1.0",
+ "integrity": "sha256-Xx19ECVDRrDWpz9D2GxQHHV89vd61dnXxQm0IcYQHGk=",
+ "dependencies": [
+ "bifunctors",
+ "effect",
+ "either",
+ "identity",
+ "maybe",
+ "partial",
+ "prelude",
+ "refs"
+ ]
+ },
+ "transformers": {
+ "type": "registry",
+ "version": "6.1.0",
+ "integrity": "sha256-3Bm+Z6tsC/paG888XkywDngJ2JMos+JfOhRlkVfb7gI=",
+ "dependencies": [
+ "control",
+ "distributive",
+ "effect",
+ "either",
+ "exceptions",
+ "foldable-traversable",
+ "identity",
+ "lazy",
+ "maybe",
+ "newtype",
+ "prelude",
+ "st",
+ "tailrec",
+ "tuples",
+ "unfoldable"
+ ]
+ },
+ "tuples": {
+ "type": "registry",
+ "version": "7.0.0",
+ "integrity": "sha256-1rXgTomes9105BjgXqIw0FL6Fz1lqqUTLWOumhWec1M=",
+ "dependencies": [
+ "control",
+ "invariant",
+ "prelude"
+ ]
+ },
+ "type-equality": {
+ "type": "registry",
+ "version": "4.0.1",
+ "integrity": "sha256-Hs9D6Y71zFi/b+qu5NSbuadUQXe5iv5iWx0226vOHUw=",
+ "dependencies": []
+ },
+ "unfoldable": {
+ "type": "registry",
+ "version": "6.0.0",
+ "integrity": "sha256-JtikvJdktRap7vr/K4ITlxUX1QexpnqBq0G/InLr6eg=",
+ "dependencies": [
+ "foldable-traversable",
+ "maybe",
+ "partial",
+ "prelude",
+ "tuples"
+ ]
+ },
+ "unsafe-coerce": {
+ "type": "registry",
+ "version": "6.0.0",
+ "integrity": "sha256-IqIYW4Vkevn8sI+6aUwRGvd87tVL36BBeOr0cGAE7t0=",
+ "dependencies": []
+ }
+ }
+}
diff --git a/spago.yaml b/spago.yaml
new file mode 100644
index 0000000..c4f23cf
--- /dev/null
+++ b/spago.yaml
@@ -0,0 +1,21 @@
+package:
+ dependencies:
+ - arrays
+ - colors
+ - console
+ - effect
+ - maybe
+ - prelude
+ - psci-support
+ - strings
+ name: dotlang
+ test:
+ main: Test.Main
+ dependencies:
+ - spec
+workspace:
+ # package_set:
+ # url: https://raw.githubusercontent.com/purescript/package-sets/psc-0.15.4-20221127/packages.json
+ packageSet:
+ registry: 65.1.0
+ extraPackages: {}
diff --git a/src/Data/DotLang.purs b/src/Data/DotLang.purs
index 3ea3cde..a4ee166 100644
--- a/src/Data/DotLang.purs
+++ b/src/Data/DotLang.purs
@@ -5,9 +5,7 @@ import Data.DotLang.Attr.Edge as Edge
import Data.DotLang.Attr.Global as Global
import Data.DotLang.Attr.Node as Node
import Data.DotLang.Class (class DotLang, toText)
-import Data.Generic.Rep (class Generic)
import Data.Maybe (Maybe(..))
-import Data.Show.Generic (genericShow)
import Data.String (joinWith)
import Prelude (class Show, ($), (<$>), (<>))
@@ -42,11 +40,6 @@ nodeId (Node id _) = id
changeNodeId :: (Id -> Id) -> Node -> Node
changeNodeId f (Node id attr) = Node (f id) $ attr <> [ Node.label id ]
-derive instance genericNode :: Generic Node _
-
-instance showNode :: Show Node where
- show = genericShow
-
instance nodeDotLang :: DotLang Node where
toText (Node id attrs) = id <> " [" <> joinWith ", " (toText <$> attrs) <> "]"
@@ -55,11 +48,6 @@ data EdgeType
| Backward
| NoDir
-derive instance genericEdgeType :: Generic EdgeType _
-
-instance showEdgeType :: Show EdgeType where
- show = genericShow
-
instance dotLangEdgeType :: DotLang EdgeType where
toText Forward = "->"
toText Backward = "<-"
@@ -74,11 +62,6 @@ instance dotLangEdgeType :: DotLang EdgeType where
data Edge
= Edge EdgeType Id Id (Array Edge.Attr)
-derive instance genericEdge :: Generic Edge _
-
-instance showEdge :: Show Edge where
- show = genericShow
-
instance dotLangEdge :: DotLang Edge where
toText (Edge e id id2 attrs) = id <> " " <> (toText e) <> " " <> id2 <> attrText
where
@@ -113,10 +96,10 @@ node id attrs = NodeDef $ Node id attrs
-- |
--| ```purescript run
---| > :t edge Forward "a" "b" []
+--| > :t edge Forward "a" "b" []
--| Definition
--| ```
--- | edge as a part of a definition.
+-- | edge as a part of a definition.
-- | `==>` and `=*>` can also be used for that purpose:
-- |
edge :: EdgeType → Id → Id → Array Edge.Attr → Definition
@@ -142,7 +125,7 @@ normalEdge l r = normalEdgeWithAttrs l r []
-- |
--| ```purescript run
---| > :t "a" ==> "b"
+--| > :t "a" ==> "b"
--| Definition
--| ```
-- | Forward edge as as a definition
diff --git a/src/Data/DotLang/Attr.purs b/src/Data/DotLang/Attr.purs
index 3dc671b..bbb4072 100644
--- a/src/Data/DotLang/Attr.purs
+++ b/src/Data/DotLang/Attr.purs
@@ -3,21 +3,12 @@ module Data.DotLang.Attr where
import Prelude
import Data.DotLang.Class (class DotLang)
-import Data.Generic.Rep (class Generic)
-import Data.Show.Generic (genericShow)
-
data FillStyle
= Filled
| Dotted
| Invis
-derive instance genericFillStyle :: Generic FillStyle _
-
-instance showFillStyle :: Show FillStyle where
- show = genericShow
-
instance fillStyleDotLang :: DotLang FillStyle where
toText Filled = "filled"
toText Dotted = "dotted"
toText Invis = "invis"
-
diff --git a/src/Data/DotLang/Attr/Edge.purs b/src/Data/DotLang/Attr/Edge.purs
index d6cec0b..a8b015c 100644
--- a/src/Data/DotLang/Attr/Edge.purs
+++ b/src/Data/DotLang/Attr/Edge.purs
@@ -4,18 +4,11 @@ import Prelude
import Color (Color, toHexString)
import Data.DotLang.Attr (FillStyle)
import Data.DotLang.Class (class DotLang, toText)
-import Data.Generic.Rep (class Generic)
-import Data.Show.Generic (genericShow)
data LabelValue
= TextLabel String
| HtmlLabel String
-derive instance genericLabel :: Generic LabelValue _
-
-instance showLabel :: Show LabelValue where
- show = genericShow
-
data ArrowHeadStyle
= Normal
| Inv
@@ -37,11 +30,6 @@ data ArrowHeadStyle
| HalfOpen
| Vee
-derive instance genericArrowHeadStyle :: Generic ArrowHeadStyle _
-
-instance showArrowHeadStyle :: Show ArrowHeadStyle where
- show = genericShow
-
instance arrowHeadStyle :: DotLang ArrowHeadStyle where
toText Normal = "normal"
toText Inv = "inv"
@@ -73,11 +61,6 @@ data Attr
| PenWidth Number
| ArrowHead ArrowHeadStyle
-derive instance genericAttr :: Generic Attr _
-
-instance showAttr :: Show Attr where
- show = genericShow
-
instance attrDotLang :: DotLang Attr where
toText (Color s) = "color=\"" <> toHexString s <> "\""
toText (FontColor s) = "fontcolor=\"" <> toHexString s <> "\""
@@ -92,7 +75,7 @@ instance attrDotLang :: DotLang Attr where
-- |
--| ```purescript run
--| > import Data.DotLang.Attr.Edge
---| > :t htmlLabel "
"
+--| > :t htmlLabel ""
--| Attr
--| ```
-- | htmlLabel as a part of an attribute of an edge.
@@ -101,7 +84,7 @@ htmlLabel = HtmlLabel >>> Label
-- |
--| ```purescript run
---| > :t label "..."
+--| > :t label "..."
--| Attr
--| ```
-- | label as a part of an attribute of an edge.
diff --git a/src/Data/DotLang/Attr/Global.purs b/src/Data/DotLang/Attr/Global.purs
index 755094b..95922cf 100644
--- a/src/Data/DotLang/Attr/Global.purs
+++ b/src/Data/DotLang/Attr/Global.purs
@@ -3,8 +3,6 @@ module Data.DotLang.Attr.Global where
import Prelude
import Data.DotLang.Class (class DotLang, toText)
-import Data.Generic.Rep (class Generic)
-import Data.Show.Generic (genericShow)
data RankDirValue
= FromTop
@@ -12,11 +10,6 @@ data RankDirValue
| FromBottom
| FromRight
-derive instance genericRankDirVal :: Generic RankDirValue _
-
-instance showRankDirValue :: Show RankDirValue where
- show = genericShow
-
instance rankDirValueDotLang :: DotLang RankDirValue where
toText FromTop = "TB"
toText FromLeft = "LR"
@@ -27,11 +20,6 @@ instance rankDirValueDotLang :: DotLang RankDirValue where
-- | lower-case second character is minor order.
data PageDirValue = Bl | Br | Tl | Tr | Rb | Rt | Lb | Lt
-derive instance genericPageDirValue :: Generic PageDirValue _
-
-instance showPageDirValue :: Show PageDirValue where
- show = genericShow
-
instance pageDirValueDotLang :: DotLang PageDirValue where
toText Bl = "BL"
toText Br = "BR"
@@ -44,33 +32,18 @@ instance pageDirValueDotLang :: DotLang PageDirValue where
data LabelJustValue = L | R
-derive instance Generic LabelJustValue _
-
-instance Show LabelJustValue where
- show = genericShow
-
instance DotLang LabelJustValue where
toText L = "l"
toText R = "r"
data LabelLocValue = T | B
-derive instance Generic LabelLocValue _
-
-instance Show LabelLocValue where
- show = genericShow
-
instance DotLang LabelLocValue where
toText T = "t"
toText B = "b"
data StyleValue = Filled | Striped | Rounded
-derive instance Generic StyleValue _
-
-instance Show StyleValue where
- show = genericShow
-
instance DotLang StyleValue where
toText Filled = "filled"
toText Striped = "striped"
@@ -85,11 +58,6 @@ data Attr
| Compound Boolean
| Style StyleValue
-derive instance genericAttr :: Generic Attr _
-
-instance showAttr :: Show Attr where
- show = genericShow
-
instance attrDotLang :: DotLang Attr where
toText (RankDir dir) = "rankdir=" <> toText dir
toText (PageDir dir) = "pagedir=" <> toText dir
diff --git a/src/Data/DotLang/Attr/Node.purs b/src/Data/DotLang/Attr/Node.purs
index 370f5cf..f6d6d7a 100644
--- a/src/Data/DotLang/Attr/Node.purs
+++ b/src/Data/DotLang/Attr/Node.purs
@@ -4,9 +4,7 @@ import Prelude
import Color (Color, toHexString)
import Data.DotLang.Class (class DotLang, toText)
-import Data.Generic.Rep (class Generic)
import Data.Maybe (Maybe(..), maybe)
-import Data.Show.Generic (genericShow)
import Data.String (joinWith)
data Style
@@ -21,11 +19,6 @@ data Style
| Diagonals
| Rounded
-derive instance Generic Style _
-
-instance Show Style where
- show = genericShow
-
instance DotLang Style where
toText Dashed = "dashed"
toText Dotted = "dotted"
@@ -43,11 +36,6 @@ data LabelValue
| HtmlLabel String
| RecordLabel RecordLabelValue
-derive instance genericLabel :: Generic LabelValue _
-
-instance showLabel :: Show LabelValue where
- show l = genericShow l
-
renderLabel :: LabelValue -> String
renderLabel = case _ of
TextLabel t -> show t
@@ -55,19 +43,14 @@ renderLabel = case _ of
RecordLabel recordValue -> show $ renderRecordLabelValue recordValue
-data RecordLabelValue
+data RecordLabelValue
= SubRecord (Array {fieldId:: Maybe String, value:: RecordLabelValue})
| Base String
-derive instance genericRecordLabelValue :: Generic RecordLabelValue _
-
-instance showRecordLabelValue :: Show RecordLabelValue where
- show l = genericShow l
-
renderRecordLabelValue :: RecordLabelValue -> String
renderRecordLabelValue = case _ of
SubRecord parts -> joinWith " | " $ map renderPart parts
- where
+ where
renderPart {fieldId, value} = brace "{" "}" $ (maybe "" (brace "<" ">") fieldId) <> renderRecordLabelValue value
brace left right str = left <> str <> right
Base str -> str
@@ -84,11 +67,6 @@ data Attr
| FillColor Color
| PenWidth Number
-derive instance genericAttr :: Generic Attr _
-
-instance showAttr :: Show Attr where
- show = genericShow
-
instance attrDotLang :: DotLang Attr where
toText (Margin i) = "margin=" <> show i
toText (Color s) = "color=\"" <> toHexString s <> "\""
@@ -164,11 +142,6 @@ data ShapeType
| Lpromoter
| Record
-derive instance genericShapeType :: Generic ShapeType _
-
-instance showShapeType :: Show ShapeType where
- show = genericShow
-
instance dotLangShape :: DotLang ShapeType where
toText Box = "box"
toText Polygon = "polygon"
@@ -244,7 +217,7 @@ htmlLabel = HtmlLabel >>> Label
-- |
--| ```purescript run
--| > import Data.DotLang.Attr.Node
---| > :t label "..."
+--| > :t label "..."
--| Attr
--| ```
-- | label as a part of an attribute of a node.
@@ -261,11 +234,11 @@ label = TextLabel >>> Label
recordLabel :: Array {fieldId:: Maybe String, value:: RecordLabelValue} -> Attr
recordLabel = SubRecord >>> RecordLabel >>> Label
-subRecord :: Array {fieldId:: Maybe String, value:: RecordLabelValue} -> {fieldId:: Maybe String, value:: RecordLabelValue}
+subRecord :: Array {fieldId:: Maybe String, value:: RecordLabelValue} -> {fieldId:: Maybe String, value:: RecordLabelValue}
subRecord v = {fieldId: Nothing, value: SubRecord v }
subLabel :: String -> {fieldId :: Maybe String, value :: RecordLabelValue}
subLabel value = {fieldId : Nothing, value: Base value }
-subId :: String -> {fieldId :: Maybe String, value :: RecordLabelValue} ->{fieldId :: Maybe String, value :: RecordLabelValue}
+subId :: String -> {fieldId :: Maybe String, value :: RecordLabelValue} ->{fieldId :: Maybe String, value :: RecordLabelValue}
subId str {value} = {fieldId: Just str, value: value}
\ No newline at end of file
diff --git a/test/Main.purs b/test/Main.purs
index 25d65e8..ed1d8a1 100644
--- a/test/Main.purs
+++ b/test/Main.purs
@@ -2,7 +2,8 @@ module Test.Main where
import Prelude
-import Color.Scheme.MaterialDesign (red)
+import Color (Color)
+import Color (rgb) as Color
import Data.DotLang (Definition(..), Graph(..), Edge(..), EdgeType(..), global, node, (==>), (=*>))
import Data.DotLang.Attr (FillStyle(..))
import Data.DotLang.Attr.Edge as Edge
@@ -12,7 +13,7 @@ import Data.DotLang.Attr.Node (Attr(..), LabelValue(..), RecordLabelValue(..), S
import Data.DotLang.Attr.Node as Node
import Data.DotLang.Class (toText)
import Data.Maybe (Maybe(..))
-import DocTest as DocTest
+-- import DocTest as DocTest
import Effect (Effect)
import Effect.Aff (launchAff_)
import Test.Spec (pending, describe, it)
@@ -20,23 +21,28 @@ import Test.Spec.Assertions (shouldEqual)
import Test.Spec.Reporter.Console (consoleReporter)
import Test.Spec.Runner (run, runSpec)
+
+red :: Color
+red = Color.rgb 244 67 54
+
+
main ∷ Effect Unit
main =
launchAff_
$ do
runSpec [ consoleReporter ] do
- DocTest.main
+ -- DocTest.main
describe "DotLang" do
it "basic test" do
let
g =
DiGraph
[ global [ Global.RankDir FromLeft ]
- , node "a" [ Shape Diamond, Style Filled, Node.FillColor red ]
+ , node "a" [ Shape Diamond, Style Node.Filled, Node.FillColor red ]
, node "b" []
, "a" ==> "b"
, "a" =*> "d" $ [ Edge.FillColor red ]
- , Subgraph
+ , Subgraph Nothing
[ node "d" []
]
]