aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEduardo Julian2021-12-24 08:58:01 -0400
committerEduardo Julian2021-12-24 08:58:01 -0400
commit63b45e09c5f5ceb59a48ed05cdc2d2c6cb038a7b (patch)
tree22545f6a3a5d8ad3c3a8d59136e0de3d03c69218
parentfad9e5b073a9efe995421db1132f191f1db94725 (diff)
Dusting off the pure-Lux JVM compiler machinery.
-rw-r--r--documentation/bookmark/back_end/haskell.md8
-rw-r--r--documentation/bookmark/back_end/scopes.md4
-rw-r--r--documentation/bookmark/back_end/wasm.md65
-rw-r--r--documentation/bookmark/concurrency.md3
-rw-r--r--documentation/bookmark/cryptography.md1
-rw-r--r--documentation/bookmark/css.md10
-rw-r--r--documentation/bookmark/database.md716
-rw-r--r--documentation/bookmark/documentation.md124
-rw-r--r--documentation/bookmark/error_messages.md5
-rw-r--r--documentation/bookmark/extensibility.md4
-rw-r--r--documentation/bookmark/game/development.md4
-rw-r--r--documentation/bookmark/game/generation/move.md4
-rw-r--r--documentation/bookmark/game/generation/plot.md5
-rw-r--r--documentation/bookmark/game/juice.md4
-rw-r--r--documentation/bookmark/game/mechanic/bug.md4
-rw-r--r--documentation/bookmark/game/mechanic/relationship.md4
-rw-r--r--documentation/bookmark/game/move.md4
-rw-r--r--documentation/bookmark/game/tool.md4
-rw-r--r--documentation/bookmark/gpu_programming.md4
-rw-r--r--documentation/bookmark/linux.md4
-rw-r--r--documentation/bookmark/math.md483
-rw-r--r--documentation/bookmark/math/geometry/computational.md4
-rw-r--r--documentation/bookmark/math/geometry/dimension.md4
-rw-r--r--documentation/bookmark/memory_management.md54
-rw-r--r--documentation/bookmark/optimization.md87
-rw-r--r--documentation/bookmark/paradigm/logic_programming.md85
-rw-r--r--documentation/bookmark/tool/text_editor.md347
-rw-r--r--documentation/bookmark/type_theory/linear.md4
-rw-r--r--documentation/bookmark/type_theory/sub_structural.md6
-rw-r--r--documentation/bookmark/user_interface/accessibility.md5
-rw-r--r--documentation/bookmark/user_interface/desktop.md6
-rw-r--r--documentation/bookmark/user_interface/widget.md4
-rw-r--r--documentation/bookmark/web_browser.md2
-rw-r--r--lux-jvm/commands.md4
-rw-r--r--lux-jvm/source/luxc/lang/translation/jvm/extension/host.lux141
-rw-r--r--stdlib/source/library/lux/control/concurrency/frp.lux57
-rw-r--r--stdlib/source/library/lux/data/collection/array.lux56
-rw-r--r--stdlib/source/library/lux/data/collection/list.lux49
-rw-r--r--stdlib/source/library/lux/data/collection/sequence.lux97
-rw-r--r--stdlib/source/library/lux/data/color/named.lux1
-rw-r--r--stdlib/source/library/lux/data/format/css/class.lux33
-rw-r--r--stdlib/source/library/lux/data/format/css/id.lux33
-rw-r--r--stdlib/source/library/lux/data/format/css/selector.lux39
-rw-r--r--stdlib/source/library/lux/data/format/html.lux104
-rw-r--r--stdlib/source/library/lux/ffi.js.lux4
-rw-r--r--stdlib/source/library/lux/ffi.lua.lux4
-rw-r--r--stdlib/source/library/lux/ffi.php.lux4
-rw-r--r--stdlib/source/library/lux/ffi.py.lux4
-rw-r--r--stdlib/source/library/lux/ffi.rb.lux4
-rw-r--r--stdlib/source/library/lux/ffi.scm.lux4
-rw-r--r--stdlib/source/library/lux/math/number/int.lux48
-rw-r--r--stdlib/source/library/lux/target/js.lux36
-rw-r--r--stdlib/source/library/lux/tool/compiler/language/lux/phase/extension/directive/jvm.lux161
-rw-r--r--stdlib/source/library/lux/tool/compiler/language/lux/phase/extension/generation/jvm/common.lux115
-rw-r--r--stdlib/source/library/lux/tool/compiler/language/lux/phase/extension/generation/jvm/host.lux205
-rw-r--r--stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/jvm/case.lux61
-rw-r--r--stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/jvm/function.lux130
-rw-r--r--stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/jvm/function/field/variable/partial.lux58
-rw-r--r--stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/jvm/function/method/apply.lux97
-rw-r--r--stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/jvm/function/method/implementation.lux39
-rw-r--r--stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/jvm/function/method/init.lux88
-rw-r--r--stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/jvm/function/method/new.lux83
-rw-r--r--stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/jvm/function/method/reset.lux2
-rw-r--r--stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/jvm/loop.lux51
-rw-r--r--stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/jvm/primitive.lux42
-rw-r--r--stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/jvm/structure.lux62
-rw-r--r--stdlib/source/library/lux/tool/compiler/language/lux/version.lux2
-rw-r--r--stdlib/source/test/lux.lux151
-rw-r--r--stdlib/source/test/lux/math/number/int.lux63
-rw-r--r--stdlib/source/test/lux/target/js.lux845
70 files changed, 3103 insertions, 1946 deletions
diff --git a/documentation/bookmark/back_end/haskell.md b/documentation/bookmark/back_end/haskell.md
index a8621380f..b54c23945 100644
--- a/documentation/bookmark/back_end/haskell.md
+++ b/documentation/bookmark/back_end/haskell.md
@@ -1,5 +1,9 @@
+# Language
+
+0. [Finkel](https://github.com/finkel-lang/finkel)
+0. [Eta - Modern Haskell on the JVM](https://github.com/typelead/eta)
+
# Reference
-1. [Thunks, Sharing, Laziness: The Haskell Heap Visualized – Joachim Breitner](https://www.youtube.com/watch?v=I4lnCG18TaY)
-1. [Eta - Modern Haskell on the JVM](https://github.com/typelead/eta)
+0. [Thunks, Sharing, Laziness: The Haskell Heap Visualized – Joachim Breitner](https://www.youtube.com/watch?v=I4lnCG18TaY)
diff --git a/documentation/bookmark/back_end/scopes.md b/documentation/bookmark/back_end/scopes.md
new file mode 100644
index 000000000..cd938a3ad
--- /dev/null
+++ b/documentation/bookmark/back_end/scopes.md
@@ -0,0 +1,4 @@
+# Reference
+
+0. [The Scopes Programming Language & Compiler Infrastructure](https://hg.sr.ht/~duangle/scopes)
+
diff --git a/documentation/bookmark/back_end/wasm.md b/documentation/bookmark/back_end/wasm.md
index 002c0b31d..7207e6d4b 100644
--- a/documentation/bookmark/back_end/wasm.md
+++ b/documentation/bookmark/back_end/wasm.md
@@ -1,39 +1,44 @@
+# Concurrency
+
+0. [Wasm threads are now available in all browsers](https://old.reddit.com/r/WebAssembly/comments/rk83mr/wasm_threads_are_now_available_in_all_browsers/)
+
# Platform
-1. [Wasmer Java](https://github.com/wasmerio/wasmer-java)
-1. [WAVM: WAVM is a WebAssembly virtual machine, designed for use in non-web applications.](https://wavm.github.io/)
+0. [Wasmer Java](https://github.com/wasmerio/wasmer-java)
+0. [WAVM: WAVM is a WebAssembly virtual machine, designed for use in non-web applications.](https://wavm.github.io/)
# Exemplar
-1. [Announcing GraalWasm — a WebAssembly engine in GraalVM](https://medium.com/graalvm/announcing-graalwasm-a-webassembly-engine-in-graalvm-25cd0400a7f2)
-1. [Towards a WebAssembly standalone runtime on GraalVM](https://dl.acm.org/citation.cfm?id=3362780)
-1. https://github.com/vvanders/wasm_lua
-1. https://github.com/AppCypher/webassemblylanguages
-1. https://medium.com/perlin-network/life-a-secure-blazing-fast-cross-platform-webassembly-vm-in-go-ea3b31fa6e09
+0. [Announcing GraalWasm — a WebAssembly engine in GraalVM](https://medium.com/graalvm/announcing-graalwasm-a-webassembly-engine-in-graalvm-25cd0400a7f2)
+0. [Towards a WebAssembly standalone runtime on GraalVM](https://dl.acm.org/citation.cfm?id=3362780)
+0. https://github.com/vvanders/wasm_lua
+0. https://github.com/AppCypher/webassemblylanguages
+0. https://medium.com/perlin-network/life-a-secure-blazing-fast-cross-platform-webassembly-vm-in-go-ea3b31fa6e09
# Reference
-1. [Wasm needs a better memory management story](https://github.com/WebAssembly/design/issues/1397)
-1. https://bytecodealliance.org/
-1. [Faster Fractals with Multi-Threaded WebAssembly](https://blog.scottlogic.com/2019/07/15/multithreaded-webassembly.html)
-1. https://blog.scottlogic.com/2018/07/20/wasm-future.html
-1. http://fitzgeraldnick.com/2018/04/26/how-does-dynamic-dispatch-work-in-wasm.html
-1. https://hacks.mozilla.org/2018/03/making-webassembly-better-for-rust-for-all-languages/
-1. https://webassembly.github.io/
-1. https://github.com/WebAssembly/spec/blob/md-proto/md-proto/WebAssembly.md
-1. https://github.com/WebAssembly/binaryen
-1. [NYLUG Presents: Luke Wagner -on- WebAssembly: A New Compiler Target For The Web](https://www.youtube.com/watch?v=RByPdCN1RQ4)
-1. https://binji.github.io/2017/03/05/webassembly-type-checking.html
-1. https://github.com/WebAssembly/spec/tree/master/interpreter
-1. https://mbebenita.github.io//WasmExplorer/
-1. http://thecodebarbarian.com/getting-started-with-webassembly-in-node.js.html
-1. http://blog.seraum.com/compiling-javascript-to-webassembly-wasm-or-asm-js-with-nectarjs
-1. https://hacks.mozilla.org/2017/07/memory-in-webassembly-and-why-its-safer-than-you-think/
-1. [Using WebAssembly and Threads (Chrome Dev Summit 2018)](https://www.youtube.com/watch?v=zgOGZgAPUjQ)
-1. https://github.com/wasmerio/wasmer
-1. https://www.fastly.com/blog/announcing-lucet-fastly-native-webassembly-compiler-runtime
-1. https://hacks.mozilla.org/2019/03/standardizing-wasi-a-webassembly-system-interface/
-1. https://cybernetist.com/2019/04/25/wasm-universal-application-runtime/
-1. https://github.com/intel/wasm-micro-runtime
-1. https://medium.com/wasmer/running-webassembly-on-the-kernel-8e04761f1d8e
+0. [Chasing Memory Bugs through V8 and WebAssembly](https://blog.stackblitz.com/posts/debugging-v8-webassembly/)
+0. [Wasm needs a better memory management story](https://github.com/WebAssembly/design/issues/1397)
+0. https://bytecodealliance.org/
+0. [Faster Fractals with Multi-Threaded WebAssembly](https://blog.scottlogic.com/2019/07/15/multithreaded-webassembly.html)
+0. https://blog.scottlogic.com/2018/07/20/wasm-future.html
+0. http://fitzgeraldnick.com/2018/04/26/how-does-dynamic-dispatch-work-in-wasm.html
+0. https://hacks.mozilla.org/2018/03/making-webassembly-better-for-rust-for-all-languages/
+0. https://webassembly.github.io/
+0. https://github.com/WebAssembly/spec/blob/md-proto/md-proto/WebAssembly.md
+0. https://github.com/WebAssembly/binaryen
+0. [NYLUG Presents: Luke Wagner -on- WebAssembly: A New Compiler Target For The Web](https://www.youtube.com/watch?v=RByPdCN1RQ4)
+0. https://binji.github.io/2017/03/05/webassembly-type-checking.html
+0. https://github.com/WebAssembly/spec/tree/master/interpreter
+0. https://mbebenita.github.io//WasmExplorer/
+0. http://thecodebarbarian.com/getting-started-with-webassembly-in-node.js.html
+0. http://blog.seraum.com/compiling-javascript-to-webassembly-wasm-or-asm-js-with-nectarjs
+0. https://hacks.mozilla.org/2017/07/memory-in-webassembly-and-why-its-safer-than-you-think/
+0. [Using WebAssembly and Threads (Chrome Dev Summit 2018)](https://www.youtube.com/watch?v=zgOGZgAPUjQ)
+0. https://github.com/wasmerio/wasmer
+0. https://www.fastly.com/blog/announcing-lucet-fastly-native-webassembly-compiler-runtime
+0. https://hacks.mozilla.org/2019/03/standardizing-wasi-a-webassembly-system-interface/
+0. https://cybernetist.com/2019/04/25/wasm-universal-application-runtime/
+0. https://github.com/intel/wasm-micro-runtime
+0. https://medium.com/wasmer/running-webassembly-on-the-kernel-8e04761f1d8e
diff --git a/documentation/bookmark/concurrency.md b/documentation/bookmark/concurrency.md
index 4d82d1c69..73db95168 100644
--- a/documentation/bookmark/concurrency.md
+++ b/documentation/bookmark/concurrency.md
@@ -1,4 +1,5 @@
# Reference
-1. [OneFile - The world's first wait-free Software Transactional Memory](http://concurrencyfreaks.blogspot.com/2019/04/onefile-worlds-first-wait-free-software.html)
+0. [Fibers](https://github.com/wingo/fibers/wiki/Manual)
+0. [OneFile - The world's first wait-free Software Transactional Memory](http://concurrencyfreaks.blogspot.com/2019/04/onefile-worlds-first-wait-free-software.html)
diff --git a/documentation/bookmark/cryptography.md b/documentation/bookmark/cryptography.md
index 0ac7ce947..3ca80b480 100644
--- a/documentation/bookmark/cryptography.md
+++ b/documentation/bookmark/cryptography.md
@@ -18,6 +18,7 @@
# Library
+0. [Web Crypto API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API)
0. [Crypto++ Library](https://cryptopp.com/)
0. [aykxt/crypto](https://github.com/aykxt/crypto)
0. [zinc: Introduce minimal cryptography library](https://git.kernel.org/pub/scm/linux/kernel/git/zx2c4/linux.git/commit/?h=zinc)
diff --git a/documentation/bookmark/css.md b/documentation/bookmark/css.md
new file mode 100644
index 000000000..16bc31531
--- /dev/null
+++ b/documentation/bookmark/css.md
@@ -0,0 +1,10 @@
+# Methodology
+
+0. [CUBE CSS](https://cube.fyi/)
+
+# Reference
+
+0. [Increasing the performance of elm-css](https://blogg.bekk.no/increasing-the-performance-of-elm-css-34075512d6a6)
+0. [The Case for Atomic / Utility-First CSS](https://johnpolacek.github.io/the-case-for-atomic-css/)
+0. [Defensive CSS](https://ishadeed.com/article/defensive-css/)
+
diff --git a/documentation/bookmark/database.md b/documentation/bookmark/database.md
index 20b367bfc..c91d99c8f 100644
--- a/documentation/bookmark/database.md
+++ b/documentation/bookmark/database.md
@@ -1,499 +1,499 @@
# Multiversion Concurrency Control
-1. [Multiversion Concurrency Control: Theory and Algorithms](http://sungsoo.github.io/papers/bernstein-1983.pdf)
-1. []()
+0. [Multiversion Concurrency Control: Theory and Algorithms](http://sungsoo.github.io/papers/bernstein-1983.pdf)
+0. []()
# Pagination
-1. [Pagination with Relative Cursors](https://shopify.engineering/pagination-relative-cursors)
+0. [Pagination with Relative Cursors](https://shopify.engineering/pagination-relative-cursors)
# Reference
-1. ["Temporal Databases for Streaming Architectures" by Jeremy Taylor and Jon Pither](https://www.youtube.com/watch?v=ykbYNBE-V3k)
-1. ["Makings of a Modern ACID Compliant Distributed Database" by Attila Szegedi](https://www.youtube.com/watch?v=pn8mCeX3LDE)
-1. https://edgedb.com/blog/a-path-to-a-10x-database/
-1. https://cstack.github.io/db_tutorial/
-1. http://www.sql-workbench.eu/dbms_comparison.html
-1. http://www.interdb.jp/pg/index.html
-1. [Foundations of Databases](http://webdam.inria.fr/Alice/)
-1. https://medium.com/textileio/building-the-firebase-for-crdts-7dd8dea8953a
+0. ["Temporal Databases for Streaming Architectures" by Jeremy Taylor and Jon Pither](https://www.youtube.com/watch?v=ykbYNBE-V3k)
+0. ["Makings of a Modern ACID Compliant Distributed Database" by Attila Szegedi](https://www.youtube.com/watch?v=pn8mCeX3LDE)
+0. https://edgedb.com/blog/a-path-to-a-10x-database/
+0. https://cstack.github.io/db_tutorial/
+0. http://www.sql-workbench.eu/dbms_comparison.html
+0. http://www.interdb.jp/pg/index.html
+0. [Foundations of Databases](http://webdam.inria.fr/Alice/)
+0. https://medium.com/textileio/building-the-firebase-for-crdts-7dd8dea8953a
# Data structure
-1. [The Concurrent 2-Trie](https://medium.com/@chrisvest/the-concurrent-2-trie-67deb2b57ba1)
+0. [The Concurrent 2-Trie](https://medium.com/@chrisvest/the-concurrent-2-trie-67deb2b57ba1)
# Query
-1. ["Morel, a functional query language" by Julian Hyde](https://www.youtube.com/watch?v=smUm3C5q2IM)
-1. [Comprehending Ringads](http://lambda-the-ultimate.org/node/5525)
-1. [Reasons why SELECT * is bad for SQL performance](https://tanelpoder.com/posts/reasons-why-select-star-is-bad-for-sql-performance/)
-1. [A Short Story About SQL’s Biggest Rival](https://www.holistics.io/blog/quel-vs-sql/)
-1. https://calcite.apache.org/
-1. https://juxt.pro/blog/crux-sql
-1. https://www.influxdata.com/blog/why-were-building-flux-a-new-data-scripting-and-query-language/
-1. https://crate.io/a/lab-notes-how-we-made-joins-23-thousand-times-faster-part-two/
-1. GC: A Graph Caching System for Subgraph/Supergraph Queries
+0. ["Morel, a functional query language" by Julian Hyde](https://www.youtube.com/watch?v=smUm3C5q2IM)
+0. [Comprehending Ringads](http://lambda-the-ultimate.org/node/5525)
+0. [Reasons why SELECT * is bad for SQL performance](https://tanelpoder.com/posts/reasons-why-select-star-is-bad-for-sql-performance/)
+0. [A Short Story About SQL’s Biggest Rival](https://www.holistics.io/blog/quel-vs-sql/)
+0. https://calcite.apache.org/
+0. https://juxt.pro/blog/crux-sql
+0. https://www.influxdata.com/blog/why-were-building-flux-a-new-data-scripting-and-query-language/
+0. https://crate.io/a/lab-notes-how-we-made-joins-23-thousand-times-faster-part-two/
+0. GC: A Graph Caching System for Subgraph/Supergraph Queries
http://www.vldb.org/pvldb/vol11/p2022-wang.pdf
-1. How to Architect a Query Compiler, Revisited
+0. How to Architect a Query Compiler, Revisited
https://www.cs.purdue.edu/homes/rompf/papers/tahboub-sigmod18.pdf
-1. https://gql.today/
-1. Everything You Always Wanted to Know About Compiled and Vectorized Queries But Were Afraid to Ask
+0. https://gql.today/
+0. Everything You Always Wanted to Know About Compiled and Vectorized Queries But Were Afraid to Ask
http://www.vldb.org/pvldb/vol11/p2209-kersten.pdf
-1. https://github.com/efficient/SuRF
-1. http://www.try-alf.org/blog/2013-10-21-relations-as-first-class-citizen
-1. https://icfp18.sigplan.org/event/hope-2018-papers-finding-fixed-points-faster
-1. Froid: Optimization of Imperative Programs in a Relational Database
+0. https://github.com/efficient/SuRF
+0. http://www.try-alf.org/blog/2013-10-21-relations-as-first-class-citizen
+0. https://icfp18.sigplan.org/event/hope-2018-papers-finding-fixed-points-faster
+0. Froid: Optimization of Imperative Programs in a Relational Database
http://www.vldb.org/pvldb/vol11/p432-ramachandra.pdf
-1. Query Combinators
+0. Query Combinators
https://arxiv.org/abs/1702.08409
-1. https://github.com/medmain/deepr
-1. https://edgedb.com/blog/we-can-do-better-than-sql/
-1. https://github.com/ollef/sixten/blob/master/docs/QueryCompilerDriver.md
+0. https://github.com/medmain/deepr
+0. https://edgedb.com/blog/we-can-do-better-than-sql/
+0. https://github.com/ollef/sixten/blob/master/docs/QueryCompilerDriver.md
# Optimization
-1. [Hera - High Efficiency Reliable Access to data stores](https://github.com/paypal/hera)
-1. [Relaxed Operator Fusion for In-Memory Databases: Making Compilation, Vectorization, and Prefetching Work Together At Last](https://db.cs.cmu.edu/papers/2017/p1-menon.pdf)
-1. https://medium.com/connect-the-dots/optimizing-queries-in-rethinkdb-584d7f660cb
-1. https://blog.acolyer.org/2019/01/18/towards-a-hands-free-query-optimizer-through-deep-learning/
-1. http://blog.felipe.rs/2019/01/29/demystifying-join-algorithms/
-1. https://corecursive.com/030-rethinking-databases-with-jon-gjengset/
+0. [Hera - High Efficiency Reliable Access to data stores](https://github.com/paypal/hera)
+0. [Relaxed Operator Fusion for In-Memory Databases: Making Compilation, Vectorization, and Prefetching Work Together At Last](https://db.cs.cmu.edu/papers/2017/p1-menon.pdf)
+0. https://medium.com/connect-the-dots/optimizing-queries-in-rethinkdb-584d7f660cb
+0. https://blog.acolyer.org/2019/01/18/towards-a-hands-free-query-optimizer-through-deep-learning/
+0. http://blog.felipe.rs/2019/01/29/demystifying-join-algorithms/
+0. https://corecursive.com/030-rethinking-databases-with-jon-gjengset/
# Index
-1. https://www.pilosa.com/
-1. https://en.wikipedia.org/wiki/Fractal_tree_index
-1. [Beating hash tables with trees? The ART-ful radix trie](https://www.the-paper-trail.org/post/art-paper-notes/)
-1. https://www.ristret.com/s/gnd4yr/brief_history_log_structured_merge_trees
-1. [Getting The Most Out Of Your PostgreSQL Indexes](https://pgdash.io/blog/postgres-indexes.html?p)
-1. http://databasearchitects.blogspot.com/2019/05/why-use-learning-when-you-can-fit.html
-1. https://priyankvex.wordpress.com/2019/05/19/a-tale-on-concatenated-indexes-master-roshi-and-gokus-fireside-chat/
+0. https://www.pilosa.com/
+0. https://en.wikipedia.org/wiki/Fractal_tree_index
+0. [Beating hash tables with trees? The ART-ful radix trie](https://www.the-paper-trail.org/post/art-paper-notes/)
+0. https://www.ristret.com/s/gnd4yr/brief_history_log_structured_merge_trees
+0. [Getting The Most Out Of Your PostgreSQL Indexes](https://pgdash.io/blog/postgres-indexes.html?p)
+0. http://databasearchitects.blogspot.com/2019/05/why-use-learning-when-you-can-fit.html
+0. https://priyankvex.wordpress.com/2019/05/19/a-tale-on-concatenated-indexes-master-roshi-and-gokus-fireside-chat/
# Relational Algebra
-1. https://slamdata.com/what-is-multidimensional-relational-algebra/
-1. https://github.com/slamdata/purescript-mra
+0. https://slamdata.com/what-is-multidimensional-relational-algebra/
+0. https://github.com/slamdata/purescript-mra
# Time traveling
-1. https://www.arangodb.com/2018/07/time-traveling-with-graph-databases/
+0. https://www.arangodb.com/2018/07/time-traveling-with-graph-databases/
# Data processing
-1. https://medium.com/@gauthierleonard/apache-beam-a-unified-programming-model-for-data-processing-pipelines-4de9fb6ede6d
+0. https://medium.com/@gauthierleonard/apache-beam-a-unified-programming-model-for-data-processing-pipelines-4de9fb6ede6d
# Philosophy
-1. http://dhickey.ie/2016/01/03/commercial-suicide-integration-at-the-database-level/
+0. http://dhickey.ie/2016/01/03/commercial-suicide-integration-at-the-database-level/
# Storage
-1. [Database Internals: A deep-dive into how distributed data systems work](https://www.oreilly.com/library/view/database-internals/9781492040330/)
-1. [B-Trees: More Than I Thought I'd Want to Know](https://benjamincongdon.me/blog/2021/08/17/B-Trees-More-Than-I-Thought-Id-Want-to-Know/)
-1. [Understanding LSM Trees: What Powers Write-Heavy Databases](https://yetanotherdevblog.com/lsm/)
-1. http://www.benstopford.com/2015/02/14/log-structured-merge-trees/
-1. A Comparison of Adaptive Radix Trees and Hash Tables
+0. [Database Internals: A deep-dive into how distributed data systems work](https://www.oreilly.com/library/view/database-internals/9781492040330/)
+0. [B-Trees: More Than I Thought I'd Want to Know](https://benjamincongdon.me/blog/2021/08/17/B-Trees-More-Than-I-Thought-Id-Want-to-Know/)
+0. [Understanding LSM Trees: What Powers Write-Heavy Databases](https://yetanotherdevblog.com/lsm/)
+0. http://www.benstopford.com/2015/02/14/log-structured-merge-trees/
+0. A Comparison of Adaptive Radix Trees and Hash Tables
https://bigdata.uni-saarland.de/publications/ARCD15.pdf
-1. HashKV: Enabling Efficient Updates in KV Storage via Hashing
+0. HashKV: Enabling Efficient Updates in KV Storage via Hashing
https://www.usenix.org/system/files/conference/atc18/atc18-chan.pdf
-1. https://akumuli.org/akumuli/2018/08/03/high-cardinality-support/
-1. Ideal Hash Trees
+0. https://akumuli.org/akumuli/2018/08/03/high-cardinality-support/
+0. Ideal Hash Trees
https://github.com/papers-we-love/papers-we-love/blob/master/data_structures/ideal-hash-trees.pdf
-1. https://clemenswinter.com/2018/08/13/how-read-100s-of-millions-of-records-per-second-from-a-single-disk/
-1. https://github.com/vmxdev/tkvdb
-1. https://blog.acolyer.org/2018/09/28/columnstore-and-b-tree-are-hybrid-physical-designs-important/
-1. http://sergeiturukin.com/2017/06/07/storage-engine-introduction.html
-1. https://accumulo.apache.org/
-1. http://www.mit.edu/~kepner/D4M/
-1. Achieving 100,000,000 database inserts per second using Accumulo and D4M
+0. https://clemenswinter.com/2018/08/13/how-read-100s-of-millions-of-records-per-second-from-a-single-disk/
+0. https://github.com/vmxdev/tkvdb
+0. https://blog.acolyer.org/2018/09/28/columnstore-and-b-tree-are-hybrid-physical-designs-important/
+0. http://sergeiturukin.com/2017/06/07/storage-engine-introduction.html
+0. https://accumulo.apache.org/
+0. http://www.mit.edu/~kepner/D4M/
+0. Achieving 100,000,000 database inserts per second using Accumulo and D4M
http://www.ieee-hpec.org/2014/CD/index_htm_files/FinalPapers/31.pdf
-1. Lambda World 2018 - The Radix Trees How IntMap Works - Tikhon Jelvis
+0. Lambda World 2018 - The Radix Trees How IntMap Works - Tikhon Jelvis
https://www.youtube.com/watch?v=0udjkEiCjog
-1. FineLine: Log-structured Transactional Storage and Recovery
+0. FineLine: Log-structured Transactional Storage and Recovery
http://www.vldb.org/pvldb/vol11/p2249-sauer.pdf
-1. Storm: a fast transactional dataplane forremote data structures
+0. Storm: a fast transactional dataplane forremote data structures
http://www.cs.technion.ac.il/~dan/papers/storm-systor-2019.pdf
# Exemplar
-1. [Debunking “Purpose-Built Data Systems”: Enter the Universal Database](https://tiledb.com/blog/debunking-purpose-built-data-systems-enter-the-universal-database-2021-08-04)
-1. [Irmin](https://irmin.org/)
-1. [Database of Databases](https://dbdb.io/)
+0. [Debunking “Purpose-Built Data Systems”: Enter the Universal Database](https://tiledb.com/blog/debunking-purpose-built-data-systems-enter-the-universal-database-2021-08-04)
+0. [Irmin](https://irmin.org/)
+0. [Database of Databases](https://dbdb.io/)
## General
-1. https://github.com/Workiva/eva/
-1. https://learndb.net/
-1. http://orientdb.com/
-1. https://ignite.apache.org/
-1. http://www.datomic.com/
-1. https://eventsourcing.com/
-1. https://geteventstore.com/
-1. http://cassandra.apache.org/
-1. https://kafka.apache.org/
-1. http://basho.com/products/riak-kv/
-1. https://www.influxdata.com/time-series-platform/influxdb/
-1. https://prestodb.io/
-1. https://github.com/mozilla/datomish
-1. http://sqream.com/
-1. http://pelotondb.io/
-1. https://github.com/tidwall/summitdb
-1. https://github.com/facebookincubator/beringei
+0. https://github.com/Workiva/eva/
+0. https://learndb.net/
+0. http://orientdb.com/
+0. https://ignite.apache.org/
+0. http://www.datomic.com/
+0. https://eventsourcing.com/
+0. https://geteventstore.com/
+0. http://cassandra.apache.org/
+0. https://kafka.apache.org/
+0. http://basho.com/products/riak-kv/
+0. https://www.influxdata.com/time-series-platform/influxdb/
+0. https://prestodb.io/
+0. https://github.com/mozilla/datomish
+0. http://sqream.com/
+0. http://pelotondb.io/
+0. https://github.com/tidwall/summitdb
+0. https://github.com/facebookincubator/beringei
https://code.facebook.com/posts/952820474848503/beringei-a-high-performance-time-series-storage-engine
-1. https://github.com/tonsky/datascript
-1. https://github.com/biokoda/actordb
-1. https://www.slashdb.com/
-1. https://realm.io/
-1. https://www.bigchaindb.com/
-1. http://samza.apache.org/
-1. https://www.umiacs.umd.edu/~zhangyp/papers/IntegriDB.pdf
-1. https://github.com/PumpkinDB/PumpkinDB
-1. https://symas.com/offerings/lightning-memory-mapped-database/
-1. http://gun.js.org/
-1. https://open.dgraph.io/post/benchmark-neo4j/
-
- 1. https://github.com/dgraph-io/dgraph
- 1. https://dgraph.io/
-1. https://www.spreadsheetdb.io/
-1. http://www.openio.io/
-1. https://github.com/pingcap/tidb
-1. http://druid.io/
-1. http://hsqldb.org/
-1. http://siridb.net/blog/time-series-with-siridb/
-1. https://github.com/jankotek/mapdb
-1. https://github.com/NationalSecurityAgency/lemongraph
-1. https://twobithistory.org/2017/10/07/the-most-important-database.html
-1. https://github.com/couchbase/forestdb
-1. https://www.nuodb.com/
-1. https://edgedb.com/
-1. https://www.harperdb.io/
-1. https://www.antidotedb.eu/
-1. https://tech.marksblogg.com/minimalist-guide-tutorial-foundationdb.html
-1. https://www.foundationdb.org/blog/announcing-document-layer/
-1. https://www.foundationdb.org/
-
- 1. https://en.wikipedia.org/wiki/FoundationDB
-1. https://github.com/orbitdb/orbit-db
-1. https://www.aerospike.com/
-1. https://sirix.io/
+0. https://github.com/tonsky/datascript
+0. https://github.com/biokoda/actordb
+0. https://www.slashdb.com/
+0. https://realm.io/
+0. https://www.bigchaindb.com/
+0. http://samza.apache.org/
+0. https://www.umiacs.umd.edu/~zhangyp/papers/IntegriDB.pdf
+0. https://github.com/PumpkinDB/PumpkinDB
+0. https://symas.com/offerings/lightning-memory-mapped-database/
+0. http://gun.js.org/
+0. https://open.dgraph.io/post/benchmark-neo4j/
+
+ 0. https://github.com/dgraph-io/dgraph
+ 0. https://dgraph.io/
+0. https://www.spreadsheetdb.io/
+0. http://www.openio.io/
+0. https://github.com/pingcap/tidb
+0. http://druid.io/
+0. http://hsqldb.org/
+0. http://siridb.net/blog/time-series-with-siridb/
+0. https://github.com/jankotek/mapdb
+0. https://github.com/NationalSecurityAgency/lemongraph
+0. https://twobithistory.org/2017/10/07/the-most-important-database.html
+0. https://github.com/couchbase/forestdb
+0. https://www.nuodb.com/
+0. https://edgedb.com/
+0. https://www.harperdb.io/
+0. https://www.antidotedb.eu/
+0. https://tech.marksblogg.com/minimalist-guide-tutorial-foundationdb.html
+0. https://www.foundationdb.org/blog/announcing-document-layer/
+0. https://www.foundationdb.org/
+
+ 0. https://en.wikipedia.org/wiki/FoundationDB
+0. https://github.com/orbitdb/orbit-db
+0. https://www.aerospike.com/
+0. https://sirix.io/
## Data-flow
-1. [Noria: data-flow for high-performance web applications](https://github.com/mit-pdos/noria)
+0. [Noria: data-flow for high-performance web applications](https://github.com/mit-pdos/noria)
## Vector Database
-1. [What is a Vector Database?](https://www.pinecone.io/learn/vector-database/)
+0. [What is a Vector Database?](https://www.pinecone.io/learn/vector-database/)
## Graph
-1. ["Asami: Turn your JSON into a Graph in 2 Lines" by Paula Gearon](https://www.youtube.com/watch?v=-XegX_K6w-o)
-1. https://github.com/hugegraph/hugegraph
-1. https://github.com/Microsoft/GraphEngine
-1. https://redislabs.com/blog/release-redisgraph-v1-0-preview/
-1. https://github.com/JanusGraph/janusgraph
-1. https://www.slideshare.net/RoiLipman/graph-algebra
-1. https://juxt.pro/crux/docs/index.html
-1. https://github.com/juxt/crux
-1. [The Crux of Bitemporality - Jon Pither](https://www.youtube.com/watch?v=3Stja6YUB94)
-1. [Bitemporality: More Than a Design Pattern](https://juxt.pro/blog/bitemporality-more-than-a-design-pattern)
+0. ["Asami: Turn your JSON into a Graph in 2 Lines" by Paula Gearon](https://www.youtube.com/watch?v=-XegX_K6w-o)
+0. https://github.com/hugegraph/hugegraph
+0. https://github.com/Microsoft/GraphEngine
+0. https://redislabs.com/blog/release-redisgraph-v1-0-preview/
+0. https://github.com/JanusGraph/janusgraph
+0. https://www.slideshare.net/RoiLipman/graph-algebra
+0. https://juxt.pro/crux/docs/index.html
+0. https://github.com/juxt/crux
+0. [The Crux of Bitemporality - Jon Pither](https://www.youtube.com/watch?v=3Stja6YUB94)
+0. [Bitemporality: More Than a Design Pattern](https://juxt.pro/blog/bitemporality-more-than-a-design-pattern)
## Column
-1. https://blog.acolyer.org/2018/09/26/the-design-and-implementation-of-modern-column-oriented-database-systems/
+0. https://blog.acolyer.org/2018/09/26/the-design-and-implementation-of-modern-column-oriented-database-systems/
## Datalog
-1. [Open Source Clojure-Datalog Databases](https://clojurelog.github.io/)
+0. [Open Source Clojure-Datalog Databases](https://clojurelog.github.io/)
## Log
-1. https://code.fb.com/core-data/logdevice-a-distributed-data-store-for-logs/
+0. https://code.fb.com/core-data/logdevice-a-distributed-data-store-for-logs/
## Key-Value
-1. https://github.com/yahoo/HaloDB
-1. https://chronicle.software/products/map/
+0. https://github.com/yahoo/HaloDB
+0. https://chronicle.software/products/map/
## Array
-1. [Array Databases: Concepts, Standards, Implementations](https://rd-alliance.org/system/files/Array-Databases_final-report.pdf)
+0. [Array Databases: Concepts, Standards, Implementations](https://rd-alliance.org/system/files/Array-Databases_final-report.pdf)
## Blockchain
-1. https://flur.ee/
+0. https://flur.ee/
## Time-series
-1. https://github.com/alpacahq/marketstore
-1. https://www.outlyer.com/blog/why-not-to-build-a-time-series-database/
+0. https://github.com/alpacahq/marketstore
+0. https://www.outlyer.com/blog/why-not-to-build-a-time-series-database/
## GPU
-1. https://blazingdb.com/#/
+0. https://blazingdb.com/#/
## Tree
-1. A Novel Method for Representing Hierarchies in a Relational Database Using Bignums and SQLite
+0. A Novel Method for Representing Hierarchies in a Relational Database Using Bignums and SQLite
https://s3.amazonaws.com/pub.xhuntley.net/Huntley_Tcl2011.pdf
# CQRS | Event-Sourcing
-1. [Introducing Derivative Event Sourcing](https://www.confluent.io/blog/event-sourcing-vs-derivative-event-sourcing-explained)
-1. https://blog.wallaroolabs.com/2018/06/implementing-time-windowing-in-an-evented-streaming-system/
-1. https://data-artisans.com/blog/a-practical-guide-to-broadcast-state-in-apache-flink
-1. https://medium.com/@hugo.oliveira.rocha/what-they-dont-tell-you-about-event-sourcing-6afc23c69e9a
-1. https://vvvvalvalval.github.io/posts/2018-11-12-datomic-event-sourcing-without-the-hassle.html
-1. https://chriskiehl.com/article/event-sourcing-is-hard
-1. https://medium.com/serialized-io/apache-kafka-is-not-for-event-sourcing-81735c3cf5c
+0. [Introducing Derivative Event Sourcing](https://www.confluent.io/blog/event-sourcing-vs-derivative-event-sourcing-explained)
+0. https://blog.wallaroolabs.com/2018/06/implementing-time-windowing-in-an-evented-streaming-system/
+0. https://data-artisans.com/blog/a-practical-guide-to-broadcast-state-in-apache-flink
+0. https://medium.com/@hugo.oliveira.rocha/what-they-dont-tell-you-about-event-sourcing-6afc23c69e9a
+0. https://vvvvalvalval.github.io/posts/2018-11-12-datomic-event-sourcing-without-the-hassle.html
+0. https://chriskiehl.com/article/event-sourcing-is-hard
+0. https://medium.com/serialized-io/apache-kafka-is-not-for-event-sourcing-81735c3cf5c
# Architecture
-1. https://www.sqlite.org/arch.html
+0. https://www.sqlite.org/arch.html
# Criticism
-1. https://codeburst.io/doing-without-databases-in-the-21st-century-6e25cf495373
+0. https://codeburst.io/doing-without-databases-in-the-21st-century-6e25cf495373
# Geo-spatial
-1. H3: Uber’s Hexagonal Hierarchical Spatial Index
+0. H3: Uber’s Hexagonal Hierarchical Spatial Index
https://eng.uber.com/h3/
-1. http://s2geometry.io/
-1. https://github.com/mourner/flatbush
+0. http://s2geometry.io/
+0. https://github.com/mourner/flatbush
# Transaction
-1. MixT: An embedded, domain-specific language for Mixed-Consistency Transactions
+0. MixT: An embedded, domain-specific language for Mixed-Consistency Transactions
https://mpmilano.github.io/MixT/
-1. The Case for Shared Nothing
+0. The Case for Shared Nothing
http://db.cs.berkeley.edu/papers/hpts85-nothing.pdf
# Consistency
-1. https://jepsen.io/consistency
-1. http://muratbuffalo.blogspot.com/2018/08/the-many-faces-of-consistency.html
-1. https://fauna.com/blog/consistency-without-clocks-faunadb-transaction-protocol
+0. https://jepsen.io/consistency
+0. http://muratbuffalo.blogspot.com/2018/08/the-many-faces-of-consistency.html
+0. https://fauna.com/blog/consistency-without-clocks-faunadb-transaction-protocol
# P2P Networking
-1. https://medium.com/perlin-network/noise-an-opinionated-p2p-networking-stack-for-decentralized-protocols-in-go-bfc6fecf157d
-1. https://xorro-p2p.github.io/
+0. https://medium.com/perlin-network/noise-an-opinionated-p2p-networking-stack-for-decentralized-protocols-in-go-bfc6fecf157d
+0. https://xorro-p2p.github.io/
# Data Visualization
-1. https://www.tadviewer.com/
+0. https://www.tadviewer.com/
# Privacy
-1. https://blog.acolyer.org/2019/06/17/towards-multiverse-databases/
-1. [Towards Multiverse Databases](https://people.csail.mit.edu/malte/pub/papers/2019-hotos-multiversedb.pdf)
+0. https://blog.acolyer.org/2019/06/17/towards-multiverse-databases/
+0. [Towards Multiverse Databases](https://people.csail.mit.edu/malte/pub/papers/2019-hotos-multiversedb.pdf)
# Security
-1. [The ZombieLoad Pragmatist: Tips for Surviving in a Post-Meltdown World](https://www.scylladb.com/2019/05/17/the-zombieload-pragmatist/)
+0. [The ZombieLoad Pragmatist: Tips for Surviving in a Post-Meltdown World](https://www.scylladb.com/2019/05/17/the-zombieload-pragmatist/)
# _Temporary cache_
-1. https://github.com/pubkey/rxdb
-1. https://hackernoon.com/execute-millions-of-sql-statements-in-milliseconds-in-the-browser-with-webassembly-and-web-workers-3e0b25c3f1a6#.w8w8qi8b3
-1. https://github.com/kripken/sql.js
-1. http://zmtp.org/
-1. https://github.com/agentm/project-m36
-1. http://graphql.org/
-1. https://docs.microsoft.com/en-us/azure/documentdb/documentdb-introduction
-1. http://storm.apache.org/
-1. http://www.intersystems.com/our-products/cache/cache-overview/
-1. https://prometheus.io/
-1. http://www.ragic.com/
-1. https://github.com/bittorrent/sqltorrent
-1. https://github.com/bitnine-oss/agensgraph
-1. [Comdb2: Bloomberg’s Highly Available Relational Database System](http://www.vldb.org/pvldb/vol9/p1377-scotti.pdf)
-1. https://www.pipelinedb.com/
-1. https://fauna.com/home
-1. https://fauna.com/blog/a-database-built-like-an-operating-system
-1. http://www.timescaledb.com/
-1. https://www.dataengineeringpodcast.com/episode-4-scylladb-with-eyal-gutkind/
-1. http://quickstep.incubator.apache.org/
-1. https://barrel-db.org/
-1. https://misfra.me/2016/04/09/tsdb-list/
-1. https://github.com/cayleygraph/cayley
-1. https://deepstreamhub.com/
-1. http://www.spdk.io/
-1. https://github.com/pilosa/pilosa
-1. http://sophia.systems/
-1. https://humio.com/
-1. https://medium.com/@uwdb/introducing-cosette-527898504bd6
-1. https://mixmax.com/blog/bee-queue-v1-node-redis-queue
-1. http://btrdb.io/
-1. https://clickhouse.yandex/
-1. https://github.com/rqlite/rqlite
-1. https://www.confluent.io/blog/ksql-open-source-streaming-sql-for-apache-kafka/
-1. https://github.com/Tencent/paxosstore
-1. https://www.ibm.com/us-en/marketplace/project-eventstore
-1. [LogDevice: a distributed data store for logs](https://code.facebook.com/posts/357056558062811)
-1. https://crate.io/
-1. http://traildb.io/
-1. http://profanedb.gitlab.io/
-1. https://github.com/PyroclastIO/metamorphic
-1. https://franchise.cloud/
-1. https://github.com/ssbc/secure-scuttlebutt
-1. ["Datafun: a functional query language" by Michael Arntzenius](https://www.youtube.com/watch?v=gC295d3V9gE)
-1. https://github.com/neo4j-contrib/spatial
-1. https://github.com/agershun/alasql
-1. http://www.tiledb.io/
-1. https://databricks.com/product/databricks-delta
-1. http://www.geomesa.org/
-1. https://bookkeeper.apache.org/
-1. https://blog.outlyer.com/top10-open-source-time-series-databases
-1. https://github.com/qubole/rubix
-1. https://github.com/confluentinc/ksql
-1. https://www.datanami.com/2018/06/15/streaming-sql-for-real-time-analytics/
-1. https://blog.fauna.com/fauna-topology-operations
-1. https://fabianlindfors.se/blog/building-an-object-store-with-foundation-db/
-1. https://use-the-index-luke.com/no-offset
-1. [GOTO 2016 • Conflict Resolution for Eventual Consistency • Martin Kleppmann](https://www.youtube.com/watch?v=yCcWpzY8dIA)
-1. https://www.thoughts-on-java.org/5-common-hibernate-mistakes-that-cause-dozens-of-unexpected-queries/
-1. https://www.nicolaferraro.me/2018/04/25/saga-pattern-in-apache-camel/
-1. http://augustl.com/blog/2018/datomic_look_at_all_the_things_i_am_not_doing/
-1. https://blog.2ndquadrant.com/application-users-vs-row-level-security/
-1. https://medium.com/databasss/on-ways-to-agree-part-1-links-and-flp-impossibility-f6bd8a6a0980
-1. https://medium.com/@robot_dreams/disk-can-be-faster-than-memory-37c57e7ebca7
-1. http://www.bailis.org/blog/when-is-acid-acid-rarely/
-1. https://hackernoon.com/five-data-models-for-sharding-and-which-is-right-f5c3fa480b00
-1. http://www.aosabook.org/en/500L/an-archaeology-inspired-database.html
-1. https://www.clever-cloud.com/blog/engineering/2015/05/20/why-auto-increment-is-a-terrible-idea/
-1. https://samrat.me/posts/2017-11-04-kvstore-linear-hashing/
-1. https://detect.io/news/2017/10/16/three-time-series-that-defeat-typical-anomaly-detection
-1. http://blog.memsql.com/scaling-distributed-joins/
-1. http://akumuli.org/akumuli/2017/11/17/indexing/
-1. https://10clouds.com/blog/postgresql-10/
-1. https://cstack.github.io/db_tutorial/
-1. https://msdn.microsoft.com/en-us/library/jj591569.aspx
-1. https://chatwithengineers.com/2016/08/29/a-survey-of-query-execution-engines-from-volcano-to-vectorized-processing/
-1. https://martin.kleppmann.com/2015/05/11/please-stop-calling-databases-cp-or-ap.html
-1. https://medium.com/the-hoard/building-a-kafka-that-doesnt-depend-on-zookeeper-2c4701b6e961#.paa4pjdtc
-1. https://blog.acolyer.org/2017/01/23/ground-a-data-context-service/
-1. https://engineering.instagram.com/sharding-ids-at-instagram-1cf5a71e5a5c#.omhi4kyaj
-1. http://rystsov.info/2017/02/15/simple-consensus.html
-1. https://blog.jooq.org/2016/10/05/why-you-should-design-your-database-to-optimise-for-statistics/
-1. https://thesquareplanet.com/blog/students-guide-to-raft/
-1. https://rjuju.github.io/postgresql/2015/07/02/how-about-hypothetical-indexes.html
-1. http://amitkapila16.blogspot.com/2017/03/hash-indexes-are-faster-than-btree.html
-1. http://rhaas.blogspot.com/2017/04/new-features-coming-in-postgresql-10.html
-1. https://fabxc.org/blog/2017-04-10-writing-a-tsdb/#
-1. https://github.com/confluentinc/bottledwater-pg
-1. http://www.postgresonline.com/journal/archives/173-Using-LTree-to-Represent-and-Query-Hierarchy-and-Tree-Structures.html
-1. https://juxt.pro/blog/posts/datascript-dom.html
-1. https://github.com/agentm/project-m36
-1. https://fortytw2.com/relational-dbs-on-kv-store-pt-1
-1. https://blog.slicingdice.com/want-to-build-a-new-time-series-database-start-here-d4c3fd1517b1
-1. http://akumuli.org/akumuli/2017/04/29/nbplustree/
-1. https://www.hugopicado.com/2017/05/06/what-event-sourcing-is-not.html
-1. https://news.realm.io/news/conflict-resolution-for-eventual-consistency-goto/
-1. https://www.citusdata.com/blog/2017/05/11/dynamo-citus-and-tradeoffs-in-distributed-databases/
-1. http://www.cakesolutions.net/teamblogs/how-to-build-a-distributed-counter
-1. https://netsil.com/blog/comparison-of-time-series-databases-netsils-use-of-druid/
-1. https://www.infoq.com/interviews/meijer-big-data
-1. https://www.cs.cmu.edu/~jarulraj/pages/sigmod_2017_tutorial.html
-1. https://speakerdeck.com/caitiem20/distributed-sagas-a-protocol-for-coordinating-microservices
-1. https://blog.timescale.com/what-the-heck-is-time-series-data-and-why-do-i-need-a-time-series-database-dcf3b1b18563
-1. https://medium.com/hyrise/the-brain-of-every-database-c622aaba7d75
-1. http://codecapsule.com/2012/11/07/ikvs-implementing-a-key-value-store-table-of-contents/
-1. https://www.cockroachlabs.com/blog/sql-in-cockroachdb-mapping-table-data-to-key-value-storage/
-1. https://blog.acolyer.org/2017/07/07/do-we-need-specialized-graph-databases-benchmarking-real-time-social-networking-applications/
-1. http://vvvvalvalval.github.io/posts/2017-07-08-Datomic-this-is-not-the-history-youre-looking-for.html?t=1&cn=ZmxleGlibGVfcmVjc18y&iid=1e725951a13247d8bdc6fe8c113647d5&uid=2418042062&nid=244+293670920
-1. https://maxdemarzi.com/2017/07/13/using-a-cuckoo-filter-for-unique-relationships/
-1. https://medium.baqend.com/real-time-databases-explained-why-meteor-rethinkdb-parse-and-firebase-dont-scale-822ff87d2f87
-1. http://dawn.cs.stanford.edu/2017/08/07/asap/
-1. [TimescaleDB vs. Postgres for time-series: 20x higher inserts, 2000x faster deletes, 1.2x-14,000x faster queries](https://blog.timescale.com/timescaledb-vs-6a696248104e)
-1. https://www.elastic.co/blog/elasticsearch-sequence-ids-6-0
-1. https://neo4j.com/blog/efficient-graph-algorithms-neo4j/
-1. https://blog.jooq.org/2017/05/30/when-to-use-bind-values-and-when-to-use-inline-values-in-sql/
-1. https://fylux.github.io/2017/08/09/VAR_Model_Time_Series/
-1. https://brandur.org/postgres-atomicity
-1. [Generative Programming and Verification - Nada Amin](https://www.youtube.com/watch?v=QuJ-cEvH_oI)
-1. http://ithare.com/oltp-db-optimizations-101-thinking-in-terms-of-execution-plans/
-1. https://pingcap.github.io/blog/2017/08/15/multi-raft/
-1. https://medium.com/@ajstorm/the-lambda-architecture-simplified-a28e436fa55e
-1. http://akumuli.org/akumuli/2016/12/30/compression_part1/
-1. https://en.wikipedia.org/wiki/Codd%27s_12_rules
-1. https://blog.jooq.org/2017/09/28/10-cool-sql-optimisations-that-do-not-depend-on-the-cost-model/
-1. https://medium.com/@ifesdjeen/on-disk-storage-part-4-b-trees-30791060741
-1. https://www.cockroachlabs.com/blog/automated-rebalance-and-repair/
-1. http://danielwhittaker.me/2017/10/09/handle-set-based-consistency-validation-cqrs/
-1. http://db.cs.cmu.edu/seminar2017/
-1. https://blog.timescale.com/time-series-data-postgresql-10-vs-timescaledb-816ee808bac5
-1. [Is Datomic strictly better than Facebook's graph datastore?](http://www.dustingetz.com/ezpjb2RlLWRhdGFiYXNlICJzdGFydGVyLWJsb2ctc3JjMiIsIDpsaW5rLWRiaWQgI0RiSWRbMTc1OTIxODYwNDU1NTkgI1VSSSAiZGF0b21pYzpmcmVlOi8vZGF0b21pYzo0MzM0L3N0YXJ0ZXItYmxvZy1zcmMyIl0sIDpxdWVyeS1wYXJhbXMgezplbnRpdHkgI0RiSWRbMTc1OTIxODYwNDYxNDQgI1VSSSAiZGF0b21pYzpmcmVlOi8vZGF0b21pYzo0MzM0L2R1c3RpbmdldHouY29tIl19fQ,,)
-1. https://www.citusdata.com/blog/2017/10/17/tour-of-postgres-index-types/
-1. https://blog.grakn.ai/modelling-data-with-hypergraphs-edff1e12edf0
-1. http://www.scylladb.com/2017/10/05/io-access-methods-scylla/
-1. http://code.hootsuite.com/row-stores-vs-column-stores-why-not-use-both/
-1. http://matthewrocklin.com/blog/work/2017/10/16/streaming-dataframes-1
-1. https://brightinventions.pl/blog/database-timeouts/
-1. https://brandur.org/redis-streams
-1. https://www.fittedcloud.com/blog/machine-learning-driven-optimization-outperforms-auto-scaling-dynamodb-capacity-management/
-1. https://parquet.apache.org/
-1. https://arrow.apache.org/
-1. https://www.youtube.com/watch?v=6lCVKMQR8Dw
-1. https://blog.acolyer.org/2015/10/15/ironfleet-proving-practical-distributed-systems-correc/
-1. https://underscore.io/blog/posts/2017/03/07/refined-data-config-database.html
-1. https://www.quickdatabasediagrams.com/
-1. [The Case for Learned Index Structures](https://arxiv.org/abs/1712.01208)
-1. https://arxiv.org/abs/0806.3115
-1. https://arxiv.org/abs/1604.03607
-1. https://arxiv.org/abs/1702.07588
-1. [HoTTSQL: Proving Query Rewrites with Univalent SQL Semantics](https://arxiv.org/abs/1607.04822)
-1. http://www.vldb.org/pvldb/vol9/p1707-pirk.pdf
-1. [Continuous Analytics Over Discontinuous Streams](https://people.eecs.berkeley.edu/~franklin/Papers/sigmod10krishnamurthy.pdf)
-1. http://www.vldb.org/
-1. https://blog.acolyer.org/2017/01/30/how-good-are-query-optimizers-really/
-1. http://gun.js.org/distributed/matters.html
-1. http://blog.datomic.com/2017/01/the-ten-rules-of-schema-growth.html
-1. https://blogs.technet.microsoft.com/dataplatforminsider/2017/01/05/how-six-lines-of-code-sql-server-can-bring-deep-learning-to-any-app/
-1. https://muratbuffalo.blogspot.com/2014/07/hybrid-logical-clocks.html
-1. https://yokota.blog/2017/02/17/dont-settle-for-eventual-consistency/
-1. [AN INTRODUCTION TO GRAPH COMPRESSION TECHNIQUES FOR IN-MEMORY GRAPH COMPUTATION](https://www.cs.umd.edu/sites/default/files/scholarly_papers/Chavan.pdf)
-1. [Relational Lattices: From Databases to Universal Algebra](http://www.dcs.bbk.ac.uk/~szabolcs/rellat-jlamp-second-submission-2.pdf)
-1. https://bitworking.org/news/2017/03/prometheus
-1. [Partioned Elias-Fano indexes](http://hpc.isti.cnr.it/hpcworkshop2014/PartitionedEliasFanoIndexes.pdf)
-1. http://h2co3.org/blog/index.php/2017/04/10/join-considered-harmful/
-1. https://blog.jooq.org/2016/07/05/say-no-to-venn-diagrams-when-explaining-joins/
-1. [A Seven-Dimensional Analysis of Hashing Methods and its Implications on Query Processing](http://www.vldb.org/pvldb/vol9/p96-richter.pdf)
-1. https://research.googleblog.com/2017/04/consistent-hashing-with-bounded-loads.html
-1. [The Adaptive Radix Tree: ARTful Indexing for Main-Memory Databases](https://pdfs.semanticscholar.org/6abf/5107efc723c655956f027b4a67565b048799.pdf)
-1. [Adapting Tree Structures for Processing with SIMD Instructions](https://openproceedings.org/2014/conf/edbt/ZeuchFH14.pdf)
-1. [Compressed Computation for Text Indexing](http://www2.compute.dtu.dk/~npre/documents/thesis.pdf)
-1. [Databases from finite categories](http://lambda-the-ultimate.org/node/5435)
-1. https://github.com/datproject/docs/blob/master/papers/dat-paper.pdf
-1. [Algorithms for Data Streams](http://twiki.di.uniroma1.it/pub/BDC/WebHome/SurveyStreaming08-DemetrescuFinocchi.pdf)
-1. [Datafun: a Functional Datalog](https://people.mpi-sws.org/~neelk/datafun.pdf)
-1. [Enabling Signal Processing over Data Streams](https://www.cs.ox.ac.uk/files/9135/sigmod2017-trilldsp.pdf)
-1. [Database Learning: Toward a Database that Becomes Smarter Every Time](https://arxiv.org/abs/1703.05468)
-1. https://github.com/jarulraj/databaseology
-1. [Write-Behind Logging](http://www.vldb.org/pvldb/vol10/p337-arulraj.pdf)
-1. [HoTTSQL: Proving Query Rewrites with Univalent SQL Semantics](https://homes.cs.washington.edu/~chushumo/files/cosette_pldi17.pdf)
-1. [PebblesDB: Building Key-Value Stores using Fragmented Log-Structured Merge Trees](http://www.cs.utexas.edu/~vijay/papers/sosp17-pebblesdb.pdf)
-1. [DROP: Dimensionality Reduction Optimization for Time Series](https://arxiv.org/abs/1708.00183)
-1. http://www.cs.yale.edu/homes/aspnes/papers/skip-graphs-journal.pdf
-1. https://www.amazon.com/Designing-Data-Intensive-Applications-Reliable-Maintainable/dp/1449373321
-1. https://www.amazon.com/Database-Reliability-Engineering-Designing-Operating/dp/1491925949
-1. https://www.enterprisetimes.co.uk/2017/02/22/can-severalnines-improve-mongodb-security/
-1. https://severalnines.com/
-1. http://engineering.pivotal.io/post/trilogy-the-sql-testing-framework/
-1. https://techcrunch.com/2016/08/19/mysql-founder-tries-a-new-software-licensing-model/
-1. https://blog.datopia.io/2018/11/03/hitchhiker-tree/
+0. https://github.com/pubkey/rxdb
+0. https://hackernoon.com/execute-millions-of-sql-statements-in-milliseconds-in-the-browser-with-webassembly-and-web-workers-3e0b25c3f1a6#.w8w8qi8b3
+0. https://github.com/kripken/sql.js
+0. http://zmtp.org/
+0. https://github.com/agentm/project-m36
+0. http://graphql.org/
+0. https://docs.microsoft.com/en-us/azure/documentdb/documentdb-introduction
+0. http://storm.apache.org/
+0. http://www.intersystems.com/our-products/cache/cache-overview/
+0. https://prometheus.io/
+0. http://www.ragic.com/
+0. https://github.com/bittorrent/sqltorrent
+0. https://github.com/bitnine-oss/agensgraph
+0. [Comdb2: Bloomberg’s Highly Available Relational Database System](http://www.vldb.org/pvldb/vol9/p1377-scotti.pdf)
+0. https://www.pipelinedb.com/
+0. https://fauna.com/home
+0. https://fauna.com/blog/a-database-built-like-an-operating-system
+0. http://www.timescaledb.com/
+0. https://www.dataengineeringpodcast.com/episode-4-scylladb-with-eyal-gutkind/
+0. http://quickstep.incubator.apache.org/
+0. https://barrel-db.org/
+0. https://misfra.me/2016/04/09/tsdb-list/
+0. https://github.com/cayleygraph/cayley
+0. https://deepstreamhub.com/
+0. http://www.spdk.io/
+0. https://github.com/pilosa/pilosa
+0. http://sophia.systems/
+0. https://humio.com/
+0. https://medium.com/@uwdb/introducing-cosette-527898504bd6
+0. https://mixmax.com/blog/bee-queue-v1-node-redis-queue
+0. http://btrdb.io/
+0. https://clickhouse.yandex/
+0. https://github.com/rqlite/rqlite
+0. https://www.confluent.io/blog/ksql-open-source-streaming-sql-for-apache-kafka/
+0. https://github.com/Tencent/paxosstore
+0. https://www.ibm.com/us-en/marketplace/project-eventstore
+0. [LogDevice: a distributed data store for logs](https://code.facebook.com/posts/357056558062811)
+0. https://crate.io/
+0. http://traildb.io/
+0. http://profanedb.gitlab.io/
+0. https://github.com/PyroclastIO/metamorphic
+0. https://franchise.cloud/
+0. https://github.com/ssbc/secure-scuttlebutt
+0. ["Datafun: a functional query language" by Michael Arntzenius](https://www.youtube.com/watch?v=gC295d3V9gE)
+0. https://github.com/neo4j-contrib/spatial
+0. https://github.com/agershun/alasql
+0. http://www.tiledb.io/
+0. https://databricks.com/product/databricks-delta
+0. http://www.geomesa.org/
+0. https://bookkeeper.apache.org/
+0. https://blog.outlyer.com/top10-open-source-time-series-databases
+0. https://github.com/qubole/rubix
+0. https://github.com/confluentinc/ksql
+0. https://www.datanami.com/2018/06/15/streaming-sql-for-real-time-analytics/
+0. https://blog.fauna.com/fauna-topology-operations
+0. https://fabianlindfors.se/blog/building-an-object-store-with-foundation-db/
+0. https://use-the-index-luke.com/no-offset
+0. [GOTO 2016 • Conflict Resolution for Eventual Consistency • Martin Kleppmann](https://www.youtube.com/watch?v=yCcWpzY8dIA)
+0. https://www.thoughts-on-java.org/5-common-hibernate-mistakes-that-cause-dozens-of-unexpected-queries/
+0. https://www.nicolaferraro.me/2018/04/25/saga-pattern-in-apache-camel/
+0. http://augustl.com/blog/2018/datomic_look_at_all_the_things_i_am_not_doing/
+0. https://blog.2ndquadrant.com/application-users-vs-row-level-security/
+0. https://medium.com/databasss/on-ways-to-agree-part-1-links-and-flp-impossibility-f6bd8a6a0980
+0. https://medium.com/@robot_dreams/disk-can-be-faster-than-memory-37c57e7ebca7
+0. http://www.bailis.org/blog/when-is-acid-acid-rarely/
+0. https://hackernoon.com/five-data-models-for-sharding-and-which-is-right-f5c3fa480b00
+0. http://www.aosabook.org/en/500L/an-archaeology-inspired-database.html
+0. https://www.clever-cloud.com/blog/engineering/2015/05/20/why-auto-increment-is-a-terrible-idea/
+0. https://samrat.me/posts/2017-11-04-kvstore-linear-hashing/
+0. https://detect.io/news/2017/10/16/three-time-series-that-defeat-typical-anomaly-detection
+0. http://blog.memsql.com/scaling-distributed-joins/
+0. http://akumuli.org/akumuli/2017/11/17/indexing/
+0. https://10clouds.com/blog/postgresql-10/
+0. https://cstack.github.io/db_tutorial/
+0. https://msdn.microsoft.com/en-us/library/jj591569.aspx
+0. https://chatwithengineers.com/2016/08/29/a-survey-of-query-execution-engines-from-volcano-to-vectorized-processing/
+0. https://martin.kleppmann.com/2015/05/11/please-stop-calling-databases-cp-or-ap.html
+0. https://medium.com/the-hoard/building-a-kafka-that-doesnt-depend-on-zookeeper-2c4701b6e961#.paa4pjdtc
+0. https://blog.acolyer.org/2017/01/23/ground-a-data-context-service/
+0. https://engineering.instagram.com/sharding-ids-at-instagram-1cf5a71e5a5c#.omhi4kyaj
+0. http://rystsov.info/2017/02/15/simple-consensus.html
+0. https://blog.jooq.org/2016/10/05/why-you-should-design-your-database-to-optimise-for-statistics/
+0. https://thesquareplanet.com/blog/students-guide-to-raft/
+0. https://rjuju.github.io/postgresql/2015/07/02/how-about-hypothetical-indexes.html
+0. http://amitkapila16.blogspot.com/2017/03/hash-indexes-are-faster-than-btree.html
+0. http://rhaas.blogspot.com/2017/04/new-features-coming-in-postgresql-10.html
+0. https://fabxc.org/blog/2017-04-10-writing-a-tsdb/#
+0. https://github.com/confluentinc/bottledwater-pg
+0. http://www.postgresonline.com/journal/archives/173-Using-LTree-to-Represent-and-Query-Hierarchy-and-Tree-Structures.html
+0. https://juxt.pro/blog/posts/datascript-dom.html
+0. https://github.com/agentm/project-m36
+0. https://fortytw2.com/relational-dbs-on-kv-store-pt-1
+0. https://blog.slicingdice.com/want-to-build-a-new-time-series-database-start-here-d4c3fd1517b1
+0. http://akumuli.org/akumuli/2017/04/29/nbplustree/
+0. https://www.hugopicado.com/2017/05/06/what-event-sourcing-is-not.html
+0. https://news.realm.io/news/conflict-resolution-for-eventual-consistency-goto/
+0. https://www.citusdata.com/blog/2017/05/11/dynamo-citus-and-tradeoffs-in-distributed-databases/
+0. http://www.cakesolutions.net/teamblogs/how-to-build-a-distributed-counter
+0. https://netsil.com/blog/comparison-of-time-series-databases-netsils-use-of-druid/
+0. https://www.infoq.com/interviews/meijer-big-data
+0. https://www.cs.cmu.edu/~jarulraj/pages/sigmod_2017_tutorial.html
+0. https://speakerdeck.com/caitiem20/distributed-sagas-a-protocol-for-coordinating-microservices
+0. https://blog.timescale.com/what-the-heck-is-time-series-data-and-why-do-i-need-a-time-series-database-dcf3b1b18563
+0. https://medium.com/hyrise/the-brain-of-every-database-c622aaba7d75
+0. http://codecapsule.com/2012/11/07/ikvs-implementing-a-key-value-store-table-of-contents/
+0. https://www.cockroachlabs.com/blog/sql-in-cockroachdb-mapping-table-data-to-key-value-storage/
+0. https://blog.acolyer.org/2017/07/07/do-we-need-specialized-graph-databases-benchmarking-real-time-social-networking-applications/
+0. http://vvvvalvalval.github.io/posts/2017-07-08-Datomic-this-is-not-the-history-youre-looking-for.html?t=1&cn=ZmxleGlibGVfcmVjc18y&iid=1e725951a13247d8bdc6fe8c113647d5&uid=2418042062&nid=244+293670920
+0. https://maxdemarzi.com/2017/07/13/using-a-cuckoo-filter-for-unique-relationships/
+0. https://medium.baqend.com/real-time-databases-explained-why-meteor-rethinkdb-parse-and-firebase-dont-scale-822ff87d2f87
+0. http://dawn.cs.stanford.edu/2017/08/07/asap/
+0. [TimescaleDB vs. Postgres for time-series: 20x higher inserts, 2000x faster deletes, 1.2x-14,000x faster queries](https://blog.timescale.com/timescaledb-vs-6a696248104e)
+0. https://www.elastic.co/blog/elasticsearch-sequence-ids-6-0
+0. https://neo4j.com/blog/efficient-graph-algorithms-neo4j/
+0. https://blog.jooq.org/2017/05/30/when-to-use-bind-values-and-when-to-use-inline-values-in-sql/
+0. https://fylux.github.io/2017/08/09/VAR_Model_Time_Series/
+0. https://brandur.org/postgres-atomicity
+0. [Generative Programming and Verification - Nada Amin](https://www.youtube.com/watch?v=QuJ-cEvH_oI)
+0. http://ithare.com/oltp-db-optimizations-101-thinking-in-terms-of-execution-plans/
+0. https://pingcap.github.io/blog/2017/08/15/multi-raft/
+0. https://medium.com/@ajstorm/the-lambda-architecture-simplified-a28e436fa55e
+0. http://akumuli.org/akumuli/2016/12/30/compression_part1/
+0. https://en.wikipedia.org/wiki/Codd%27s_12_rules
+0. https://blog.jooq.org/2017/09/28/10-cool-sql-optimisations-that-do-not-depend-on-the-cost-model/
+0. https://medium.com/@ifesdjeen/on-disk-storage-part-4-b-trees-30791060741
+0. https://www.cockroachlabs.com/blog/automated-rebalance-and-repair/
+0. http://danielwhittaker.me/2017/10/09/handle-set-based-consistency-validation-cqrs/
+0. http://db.cs.cmu.edu/seminar2017/
+0. https://blog.timescale.com/time-series-data-postgresql-10-vs-timescaledb-816ee808bac5
+0. [Is Datomic strictly better than Facebook's graph datastore?](http://www.dustingetz.com/ezpjb2RlLWRhdGFiYXNlICJzdGFydGVyLWJsb2ctc3JjMiIsIDpsaW5rLWRiaWQgI0RiSWRbMTc1OTIxODYwNDU1NTkgI1VSSSAiZGF0b21pYzpmcmVlOi8vZGF0b21pYzo0MzM0L3N0YXJ0ZXItYmxvZy1zcmMyIl0sIDpxdWVyeS1wYXJhbXMgezplbnRpdHkgI0RiSWRbMTc1OTIxODYwNDYxNDQgI1VSSSAiZGF0b21pYzpmcmVlOi8vZGF0b21pYzo0MzM0L2R1c3RpbmdldHouY29tIl19fQ,,)
+0. https://www.citusdata.com/blog/2017/10/17/tour-of-postgres-index-types/
+0. https://blog.grakn.ai/modelling-data-with-hypergraphs-edff1e12edf0
+0. http://www.scylladb.com/2017/10/05/io-access-methods-scylla/
+0. http://code.hootsuite.com/row-stores-vs-column-stores-why-not-use-both/
+0. http://matthewrocklin.com/blog/work/2017/10/16/streaming-dataframes-1
+0. https://brightinventions.pl/blog/database-timeouts/
+0. https://brandur.org/redis-streams
+0. https://www.fittedcloud.com/blog/machine-learning-driven-optimization-outperforms-auto-scaling-dynamodb-capacity-management/
+0. https://parquet.apache.org/
+0. https://arrow.apache.org/
+0. https://www.youtube.com/watch?v=6lCVKMQR8Dw
+0. https://blog.acolyer.org/2015/10/15/ironfleet-proving-practical-distributed-systems-correc/
+0. https://underscore.io/blog/posts/2017/03/07/refined-data-config-database.html
+0. https://www.quickdatabasediagrams.com/
+0. [The Case for Learned Index Structures](https://arxiv.org/abs/1712.01208)
+0. https://arxiv.org/abs/0806.3115
+0. https://arxiv.org/abs/1604.03607
+0. https://arxiv.org/abs/1702.07588
+0. [HoTTSQL: Proving Query Rewrites with Univalent SQL Semantics](https://arxiv.org/abs/1607.04822)
+0. http://www.vldb.org/pvldb/vol9/p1707-pirk.pdf
+0. [Continuous Analytics Over Discontinuous Streams](https://people.eecs.berkeley.edu/~franklin/Papers/sigmod10krishnamurthy.pdf)
+0. http://www.vldb.org/
+0. https://blog.acolyer.org/2017/01/30/how-good-are-query-optimizers-really/
+0. http://gun.js.org/distributed/matters.html
+0. http://blog.datomic.com/2017/01/the-ten-rules-of-schema-growth.html
+0. https://blogs.technet.microsoft.com/dataplatforminsider/2017/01/05/how-six-lines-of-code-sql-server-can-bring-deep-learning-to-any-app/
+0. https://muratbuffalo.blogspot.com/2014/07/hybrid-logical-clocks.html
+0. https://yokota.blog/2017/02/17/dont-settle-for-eventual-consistency/
+0. [AN INTRODUCTION TO GRAPH COMPRESSION TECHNIQUES FOR IN-MEMORY GRAPH COMPUTATION](https://www.cs.umd.edu/sites/default/files/scholarly_papers/Chavan.pdf)
+0. [Relational Lattices: From Databases to Universal Algebra](http://www.dcs.bbk.ac.uk/~szabolcs/rellat-jlamp-second-submission-2.pdf)
+0. https://bitworking.org/news/2017/03/prometheus
+0. [Partioned Elias-Fano indexes](http://hpc.isti.cnr.it/hpcworkshop2014/PartitionedEliasFanoIndexes.pdf)
+0. http://h2co3.org/blog/index.php/2017/04/10/join-considered-harmful/
+0. https://blog.jooq.org/2016/07/05/say-no-to-venn-diagrams-when-explaining-joins/
+0. [A Seven-Dimensional Analysis of Hashing Methods and its Implications on Query Processing](http://www.vldb.org/pvldb/vol9/p96-richter.pdf)
+0. https://research.googleblog.com/2017/04/consistent-hashing-with-bounded-loads.html
+0. [The Adaptive Radix Tree: ARTful Indexing for Main-Memory Databases](https://pdfs.semanticscholar.org/6abf/5107efc723c655956f027b4a67565b048799.pdf)
+0. [Adapting Tree Structures for Processing with SIMD Instructions](https://openproceedings.org/2014/conf/edbt/ZeuchFH14.pdf)
+0. [Compressed Computation for Text Indexing](http://www2.compute.dtu.dk/~npre/documents/thesis.pdf)
+0. [Databases from finite categories](http://lambda-the-ultimate.org/node/5435)
+0. https://github.com/datproject/docs/blob/master/papers/dat-paper.pdf
+0. [Algorithms for Data Streams](http://twiki.di.uniroma1.it/pub/BDC/WebHome/SurveyStreaming08-DemetrescuFinocchi.pdf)
+0. [Datafun: a Functional Datalog](https://people.mpi-sws.org/~neelk/datafun.pdf)
+0. [Enabling Signal Processing over Data Streams](https://www.cs.ox.ac.uk/files/9135/sigmod2017-trilldsp.pdf)
+0. [Database Learning: Toward a Database that Becomes Smarter Every Time](https://arxiv.org/abs/1703.05468)
+0. https://github.com/jarulraj/databaseology
+0. [Write-Behind Logging](http://www.vldb.org/pvldb/vol10/p337-arulraj.pdf)
+0. [HoTTSQL: Proving Query Rewrites with Univalent SQL Semantics](https://homes.cs.washington.edu/~chushumo/files/cosette_pldi17.pdf)
+0. [PebblesDB: Building Key-Value Stores using Fragmented Log-Structured Merge Trees](http://www.cs.utexas.edu/~vijay/papers/sosp17-pebblesdb.pdf)
+0. [DROP: Dimensionality Reduction Optimization for Time Series](https://arxiv.org/abs/1708.00183)
+0. http://www.cs.yale.edu/homes/aspnes/papers/skip-graphs-journal.pdf
+0. https://www.amazon.com/Designing-Data-Intensive-Applications-Reliable-Maintainable/dp/1449373321
+0. https://www.amazon.com/Database-Reliability-Engineering-Designing-Operating/dp/1491925949
+0. https://www.enterprisetimes.co.uk/2017/02/22/can-severalnines-improve-mongodb-security/
+0. https://severalnines.com/
+0. http://engineering.pivotal.io/post/trilogy-the-sql-testing-framework/
+0. https://techcrunch.com/2016/08/19/mysql-founder-tries-a-new-software-licensing-model/
+0. https://blog.datopia.io/2018/11/03/hitchhiker-tree/
diff --git a/documentation/bookmark/documentation.md b/documentation/bookmark/documentation.md
index b57f38630..f6efeb70e 100644
--- a/documentation/bookmark/documentation.md
+++ b/documentation/bookmark/documentation.md
@@ -1,85 +1,87 @@
# Architecture
-1. [ARCHITECTURE.md](https://matklad.github.io/2021/02/06/ARCHITECTURE.md.html)
+0. [ARCHITECTURE.md](https://matklad.github.io/2021/02/06/ARCHITECTURE.md.html)
# Programming
-1. [Skribilo: The Ultimate Document Programming Framework](https://www.nongnu.org/skribilo/)
+0. [Skribilo: The Ultimate Document Programming Framework](https://www.nongnu.org/skribilo/)
# Diagram | Chart
-1. https://c4model.com/
-1. https://github.com/lukaslueg/macro_railroad
-1. https://bramp.github.io/js-sequence-diagrams/
-1. https://github.com/erikbrinkman/d3-dag
-1. https://dumptyd.github.io/treeflex/
-1. https://info.datalabsagency.com/blog/data-visualization-news/15-most-common-types-of-data-visualisation
-1. https://wettel.github.io/codecity.html
-1. http://quantifiedcode.github.io/code-is-beautiful/
-1. http://js.cytoscape.org/
-1. https://arcentry.com/
-1. https://bramp.github.io/js-sequence-diagrams/
-1. https://brokenbaysoftware.co/2018/12/18/Cumulative-Flow/
-1. https://frappe.io/gantt
-1. https://dbdiagram.io/home/
-1. https://ptsjs.org/
-1. https://blog.usejournal.com/bridging-the-gap-between-low-level-and-high-level-charting-libraries-a8f6c1819ba5
-1. https://www.infoq.com/articles/why-architectural-diagrams
-1. https://gramener.github.io/visual-vocabulary-vega/
-1. [Visually Representing the Landscape of Mathematical Structures](https://arxiv.org/abs/1809.05930)
-1. http://www.java2uml.com/s
+0. https://c4model.com/
+0. https://github.com/lukaslueg/macro_railroad
+0. https://bramp.github.io/js-sequence-diagrams/
+0. https://github.com/erikbrinkman/d3-dag
+0. https://dumptyd.github.io/treeflex/
+0. https://info.datalabsagency.com/blog/data-visualization-news/15-most-common-types-of-data-visualisation
+0. https://wettel.github.io/codecity.html
+0. http://quantifiedcode.github.io/code-is-beautiful/
+0. http://js.cytoscape.org/
+0. https://arcentry.com/
+0. https://bramp.github.io/js-sequence-diagrams/
+0. https://brokenbaysoftware.co/2018/12/18/Cumulative-Flow/
+0. https://frappe.io/gantt
+0. https://dbdiagram.io/home/
+0. https://ptsjs.org/
+0. https://blog.usejournal.com/bridging-the-gap-between-low-level-and-high-level-charting-libraries-a8f6c1819ba5
+0. https://www.infoq.com/articles/why-architectural-diagrams
+0. https://gramener.github.io/visual-vocabulary-vega/
+0. [Visually Representing the Landscape of Mathematical Structures](https://arxiv.org/abs/1809.05930)
+0. http://www.java2uml.com/s
# Philosophy
-1. [Forget reusability, aim for perfection](https://www.openbsd.org/papers/bsdcan18-mandoc.pdf)
-1. https://increment.com/documentation/
-1. https://blog.stoplight.io/writing-documentation-when-you-arent-a-technical-writer-part-two-59997587cc2a
+0. [Forget reusability, aim for perfection](https://www.openbsd.org/papers/bsdcan18-mandoc.pdf)
+0. https://increment.com/documentation/
+0. https://blog.stoplight.io/writing-documentation-when-you-arent-a-technical-writer-part-two-59997587cc2a
# Explorability
-1. https://explorabl.es/jam/
-1. https://flowium.com/help.html
-1. https://apfelmus.nfshost.com/blog/2018/08/06-hyper-0-2.html
+0. [Code Hike](https://codehike.org/)
+0. https://explorabl.es/jam/
+0. https://flowium.com/help.html
+0. https://apfelmus.nfshost.com/blog/2018/08/06-hyper-0-2.html
# README
-1. https://github.com/LappleApple/feedmereadmes
+0. https://github.com/LappleApple/feedmereadmes
# Doclet
-1. https://docs.oracle.com/javase/8/docs/technotes/guides/javadoc/doclet/overview.html
-1. http://www.doclet.com/
-1. https://en.wikipedia.org/wiki/Doclet
+0. https://docs.oracle.com/javase/8/docs/technotes/guides/javadoc/doclet/overview.html
+0. http://www.doclet.com/
+0. https://en.wikipedia.org/wiki/Doclet
# Reference
-1. [Architecture decision record (ADR)](https://github.com/joelparkerhenderson/architecture_decision_record)
-1. [Seamless API Specification](https://github.com/seamlessapis/seamless/tree/master/domain)
-1. [Pollen: the book is a program](https://docs.racket-lang.org/pollen/)
-1. [Documenting the Clojure/Script Ecosystem – Martin Klepsch](https://www.youtube.com/watch?v=mWrvd6SE7Vg)
-1. http://apistylebook.com/
-1. https://docusaurus.io/
-1. https://gist.github.com/oakes/8db57ac808bf6ec144d627fd83a89da3
-1. https://github.com/oakes/Dynadoc
-1. https://github.com/bhauman/devcards
-1. https://kiwidocs.js.org/
-1. https://github.com/Microsoft/tsdoc
-1. https://github.com/PharkMillups/beautiful-docs
-1. http://lwm.github.io/posts/html/document-haskell.html
-1. http://lwm.github.io/texts/lets-write-documentation-for-haskell/
-1. https://groups.google.com/forum/#!msg/scala-internals/r2GnzCFc3TY/x3PmIq4cAgAJ
-1. http://naildrivin5.com/blog/2016/12/08/learn-graphviz-and-up-your-diagramming-game.html
-1. https://idyll-lang.github.io/
-1. https://opensource.com/article/17/9/modular-documentation
-1. https://clojurecademy.github.io/dsl-documentation/#
-1. https://www.asyncapi.com/
-1. http://jupyter.org/
-1. https://medium.freecodecamp.org/how-to-build-interactive-presentations-with-jupyter-notebook-and-reveal-js-c7e24f4bd9c5
-1. https://github.com/stevekrouse/unbreakable-links
-1. https://www.divio.com/en/blog/documentation/
-1. https://github.com/Bogdan-Lyashenko/js-code-to-svg-flowchart
-1. https://anbasile.github.io/programming/2015/12/25/hosting-reveal-pres-on-github/
-1. http://www.megacz.com/software/wix/
-1. https://github.com/documentationjs/documentation
-1. https://www.cockroachlabs.com/blog/go-file-size/
+0. [conventional: comments](https://conventionalcomments.org/)
+0. [Architecture decision record (ADR)](https://github.com/joelparkerhenderson/architecture_decision_record)
+0. [Seamless API Specification](https://github.com/seamlessapis/seamless/tree/master/domain)
+0. [Pollen: the book is a program](https://docs.racket-lang.org/pollen/)
+0. [Documenting the Clojure/Script Ecosystem – Martin Klepsch](https://www.youtube.com/watch?v=mWrvd6SE7Vg)
+0. http://apistylebook.com/
+0. https://docusaurus.io/
+0. https://gist.github.com/oakes/8db57ac808bf6ec144d627fd83a89da3
+0. https://github.com/oakes/Dynadoc
+0. https://github.com/bhauman/devcards
+0. https://kiwidocs.js.org/
+0. https://github.com/Microsoft/tsdoc
+0. https://github.com/PharkMillups/beautiful-docs
+0. http://lwm.github.io/posts/html/document-haskell.html
+0. http://lwm.github.io/texts/lets-write-documentation-for-haskell/
+0. https://groups.google.com/forum/#!msg/scala-internals/r2GnzCFc3TY/x3PmIq4cAgAJ
+0. http://naildrivin5.com/blog/2016/12/08/learn-graphviz-and-up-your-diagramming-game.html
+0. https://idyll-lang.github.io/
+0. https://opensource.com/article/17/9/modular-documentation
+0. https://clojurecademy.github.io/dsl-documentation/#
+0. https://www.asyncapi.com/
+0. http://jupyter.org/
+0. https://medium.freecodecamp.org/how-to-build-interactive-presentations-with-jupyter-notebook-and-reveal-js-c7e24f4bd9c5
+0. https://github.com/stevekrouse/unbreakable-links
+0. https://www.divio.com/en/blog/documentation/
+0. https://github.com/Bogdan-Lyashenko/js-code-to-svg-flowchart
+0. https://anbasile.github.io/programming/2015/12/25/hosting-reveal-pres-on-github/
+0. http://www.megacz.com/software/wix/
+0. https://github.com/documentationjs/documentation
+0. https://www.cockroachlabs.com/blog/go-file-size/
diff --git a/documentation/bookmark/error_messages.md b/documentation/bookmark/error_messages.md
index f3b7a3120..5fc1d6d5a 100644
--- a/documentation/bookmark/error_messages.md
+++ b/documentation/bookmark/error_messages.md
@@ -1,5 +1,6 @@
# Reference
-1. [Error Messages in Haskell, and how to Improve them](https://anthony.noided.media/blog/haskell/programming/2020/05/14/haskell-errors.html)
-1. [The Futhark Error Index](https://futhark-lang.org/blog/2021-09-24-the-futhark-error-index.html)
+0. [Error Message Style Guides of Various Languages](https://www.pypy.org/posts/2021/12/error-message-style-guides.html)
+0. [Error Messages in Haskell, and how to Improve them](https://anthony.noided.media/blog/haskell/programming/2020/05/14/haskell-errors.html)
+0. [The Futhark Error Index](https://futhark-lang.org/blog/2021-09-24-the-futhark-error-index.html)
diff --git a/documentation/bookmark/extensibility.md b/documentation/bookmark/extensibility.md
new file mode 100644
index 000000000..8e95e15e4
--- /dev/null
+++ b/documentation/bookmark/extensibility.md
@@ -0,0 +1,4 @@
+# Reference
+
+0. [Extensibility over configuration](https://www.gertgoeman.com/posts/extensibility-over-configuration/)
+
diff --git a/documentation/bookmark/game/development.md b/documentation/bookmark/game/development.md
new file mode 100644
index 000000000..80125f550
--- /dev/null
+++ b/documentation/bookmark/game/development.md
@@ -0,0 +1,4 @@
+# Reference
+
+0. [Evan Debenham- Community-Driven Roguelike Development](https://www.youtube.com/watch?v=NMWQIdfCgQg)
+
diff --git a/documentation/bookmark/game/generation/move.md b/documentation/bookmark/game/generation/move.md
new file mode 100644
index 000000000..95ceccb54
--- /dev/null
+++ b/documentation/bookmark/game/generation/move.md
@@ -0,0 +1,4 @@
+# Reference
+
+0. [Thomas Robertson - Towards a New Understanding of Procedural Super Attacks](https://www.youtube.com/watch?v=f1t4yPjfZyM)
+
diff --git a/documentation/bookmark/game/generation/plot.md b/documentation/bookmark/game/generation/plot.md
new file mode 100644
index 000000000..65a0a42cc
--- /dev/null
+++ b/documentation/bookmark/game/generation/plot.md
@@ -0,0 +1,5 @@
+# Reference
+
+0. [Best Practices for Procedural Narrative Generation](https://www.youtube.com/watch?v=k2rgzZ2WXKo)
+0. [Jasmine Otto - Cyclic Plot Generation in a Narrative Instrument](https://www.youtube.com/watch?v=NjIDVIIg1lY)
+
diff --git a/documentation/bookmark/game/juice.md b/documentation/bookmark/game/juice.md
new file mode 100644
index 000000000..33869e553
--- /dev/null
+++ b/documentation/bookmark/game/juice.md
@@ -0,0 +1,4 @@
+# Reference
+
+0. [Jeremiah Reid - Juice your Turns](https://www.youtube.com/watch?v=xSYVQc7cH-4)
+
diff --git a/documentation/bookmark/game/mechanic/bug.md b/documentation/bookmark/game/mechanic/bug.md
new file mode 100644
index 000000000..4b95dbfc3
--- /dev/null
+++ b/documentation/bookmark/game/mechanic/bug.md
@@ -0,0 +1,4 @@
+# Reference
+
+0. [Jason Grinblat- Before you Fix a Leak, Ask if it's a Fountain](https://www.youtube.com/watch?v=kvCky6BbTuE)
+
diff --git a/documentation/bookmark/game/mechanic/relationship.md b/documentation/bookmark/game/mechanic/relationship.md
new file mode 100644
index 000000000..f6b0c7874
--- /dev/null
+++ b/documentation/bookmark/game/mechanic/relationship.md
@@ -0,0 +1,4 @@
+# Reference
+
+0. [Brenda Romero - Dynamic Relationships and Traits in Empire of Sin](https://www.youtube.com/watch?v=_vf3HO3wn20)
+
diff --git a/documentation/bookmark/game/move.md b/documentation/bookmark/game/move.md
new file mode 100644
index 000000000..468a96eef
--- /dev/null
+++ b/documentation/bookmark/game/move.md
@@ -0,0 +1,4 @@
+# Reference
+
+0. [Dylan White - The Cost of Magic](https://www.youtube.com/watch?v=kvgKKRLil_8)
+
diff --git a/documentation/bookmark/game/tool.md b/documentation/bookmark/game/tool.md
new file mode 100644
index 000000000..4694a517e
--- /dev/null
+++ b/documentation/bookmark/game/tool.md
@@ -0,0 +1,4 @@
+# Reference
+
+0. [Spencer Egart- Tooling for Roguelikes and Procgen](https://www.youtube.com/watch?v=YfLYPIXGF7E)
+
diff --git a/documentation/bookmark/gpu_programming.md b/documentation/bookmark/gpu_programming.md
new file mode 100644
index 000000000..78124fc76
--- /dev/null
+++ b/documentation/bookmark/gpu_programming.md
@@ -0,0 +1,4 @@
+# Reference
+
+0. [Generic GPU Kernels](https://mikeinnes.github.io/2017/08/24/cudanative.html)
+
diff --git a/documentation/bookmark/linux.md b/documentation/bookmark/linux.md
new file mode 100644
index 000000000..c73958f37
--- /dev/null
+++ b/documentation/bookmark/linux.md
@@ -0,0 +1,4 @@
+# Reference
+
+0. [Portable binaries for Linux](http://s.minos.io/)
+
diff --git a/documentation/bookmark/math.md b/documentation/bookmark/math.md
index 760e4d177..3dbafd686 100644
--- a/documentation/bookmark/math.md
+++ b/documentation/bookmark/math.md
@@ -1,405 +1,408 @@
# Logarithm
-1. [Logarithm: The Complete Guide (Theory & Applications)](https://mathvault.ca/logarithm-theory/)
+0. [Logarithm: The Complete Guide (Theory & Applications)](https://mathvault.ca/logarithm-theory/)
# Ball arithmetic
-1. [Ball arithmetic](http://www.texmacs.org/joris/ball/ball.html)
+0. [Ball arithmetic](http://www.texmacs.org/joris/ball/ball.html)
# Arithmetic
-1. [The Definitive Higher Math Guide on Integer Long Division (and Its Variants)](https://mathvault.ca/long-division/)
+0. [The Definitive Higher Math Guide on Integer Long Division (and Its Variants)](https://mathvault.ca/long-division/)
# Tensor calculus
-1. [Introduction to Tensor Calculus](http://www.ita.uni-heidelberg.de/~dullemond/lectures/tensor/tensor.pdf)
+0. [Introduction to Tensor Calculus](http://www.ita.uni-heidelberg.de/~dullemond/lectures/tensor/tensor.pdf)
# Geometry
-1. [Perspectives on Projective Geometry: A Guided Tour through Real and Complex Geometry](https://www-m10.ma.tum.de/foswiki/pub/Lehre/WS0910/ProjektiveGeometrieWS0910/GeomBook.pdf)
-1. [Symplectic Geometry for Engineers - Fundamentals](https://www.researchgate.net/publication/338124384_Symplectic_Geometry_for_Engineers_-_Fundamentals)
+0. [Perspectives on Projective Geometry: A Guided Tour through Real and Complex Geometry](https://www-m10.ma.tum.de/foswiki/pub/Lehre/WS0910/ProjektiveGeometrieWS0910/GeomBook.pdf)
+0. [Symplectic Geometry for Engineers - Fundamentals](https://www.researchgate.net/publication/338124384_Symplectic_Geometry_for_Engineers_-_Fundamentals)
# Prime number
-1. [The History of the Primality of One: A Selection of Sources](https://cs.uwaterloo.ca/journals/JIS/VOL15/Caldwell2/cald6.pdf)
+0. [The History of the Primality of One: A Selection of Sources](https://cs.uwaterloo.ca/journals/JIS/VOL15/Caldwell2/cald6.pdf)
# Trigonometry
-1. [Approximating the Sine Function](http://datagenetics.com/blog/july12019/index.html)
+0. [Approximating the Sine Function](http://datagenetics.com/blog/july12019/index.html)
# Period
-1. https://en.wikipedia.org/wiki/Ring_of_periods
-1. [PERIODS](http://www.ihes.fr/~maxim/TEXTS/Periods.pdf)
+0. https://en.wikipedia.org/wiki/Ring_of_periods
+0. [PERIODS](http://www.ihes.fr/~maxim/TEXTS/Periods.pdf)
# Proof theory
-1. [Mathematical Components](https://math-comp.github.io/mcb/)
+0. [Mathematical Components](https://math-comp.github.io/mcb/)
# Statistics
-1. https://www.statisticsdonewrong.com/
+0. https://www.statisticsdonewrong.com/
# Topology
-1. [What is Topology?](https://medium.com/cantors-paradise/what-is-topology-963ef4cc6365)
-1. [Pointless topology](https://en.wikipedia.org/wiki/Pointless_topology)
-1. [ELEMENTARY APPLIED TOPOLOGY](https://www.math.upenn.edu/~ghrist/notes.html)
+0. [What is Topology?](https://medium.com/cantors-paradise/what-is-topology-963ef4cc6365)
+0. [Pointless topology](https://en.wikipedia.org/wiki/Pointless_topology)
+0. [ELEMENTARY APPLIED TOPOLOGY](https://www.math.upenn.edu/~ghrist/notes.html)
# Library
-1. https://github.com/ZacharyPatten/Towel
+0. https://github.com/ZacharyPatten/Towel
# Polynomials
-1. https://brainbomb.org/0-1-efficient-metholds-for-evaluting-polynomials/
-1. https://en.wikipedia.org/wiki/Horner%27s_method
+0. https://brainbomb.org/0-1-efficient-metholds-for-evaluting-polynomials/
+0. https://en.wikipedia.org/wiki/Horner%27s_method
# Chaos Theory
-1. http://ncase.me/attractors/
+0. http://ncase.me/attractors/
# Number Theory
-1. https://twitter.com/johncarlosbaez/status/1184492139897507840
-1. https://en.wikipedia.org/wiki/Division_algebra
-1. [Division algebras](https://www.youtube.com/watch?v=3BZyds_KFWM&list=PLNxhIPHaOTRZMO1VjJcs7_3dgyJ2qU1yZ)
-1. https://www.quantamagazine.org/the-octonion-math-that-could-underpin-physics-20180720
-1. http://illustratedtheoryofnumbers.com/
-1. [Topology of Numbers](http://pi.math.cornell.edu/~hatcher/TN/TNpage.html)
+0. https://twitter.com/johncarlosbaez/status/1184492139897507840
+0. https://en.wikipedia.org/wiki/Division_algebra
+0. [Division algebras](https://www.youtube.com/watch?v=3BZyds_KFWM&list=PLNxhIPHaOTRZMO1VjJcs7_3dgyJ2qU1yZ)
+0. https://www.quantamagazine.org/the-octonion-math-that-could-underpin-physics-20180720
+0. http://illustratedtheoryofnumbers.com/
+0. [Topology of Numbers](http://pi.math.cornell.edu/~hatcher/TN/TNpage.html)
## Hyperreal number
-1. [Yes, You Can Manipulate Infinity—in Math](https://mindmatters.ai/2019/10/yes-you-can-manipulate-infinity-in-math/)
+0. [Yes, You Can Manipulate Infinity—in Math](https://mindmatters.ai/2019/10/yes-you-can-manipulate-infinity-in-math/)
# Quaternions
-1. [Maths - Quaternions](http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/index.htm)
-1. [Stepping into a New Dimension: Using Quaternions to See the Invisible](https://medium.com/@vieyrasoftware/stepping-into-a-new-dimension-using-quaternions-to-see-the-invisible-478087c9ebbf)
-1. [How Quaternions Produce 3D Rotation](https://penguinmaths.blogspot.com/2019/06/how-quaternions-produce-3d-rotation.html)
-1. https://www.3dgep.com/understanding-quaternions/
-1. https://probablydance.com/2017/08/05/intuitive-quaternions/
-1. [Quaternion algebras](https://math.dartmouth.edu/~jvoight/quat.html)
-1. [Rotations with quaternions](https://imadr.github.io/rotations-with-quaternions/)
+0. [Quaternions: Part 1](https://liorsinai.github.io/mathematics/2021/11/05/quaternion-1-intro.html)
+0. [Maths - Quaternions](http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/index.htm)
+0. [Stepping into a New Dimension: Using Quaternions to See the Invisible](https://medium.com/@vieyrasoftware/stepping-into-a-new-dimension-using-quaternions-to-see-the-invisible-478087c9ebbf)
+0. [How Quaternions Produce 3D Rotation](https://penguinmaths.blogspot.com/2019/06/how-quaternions-produce-3d-rotation.html)
+0. https://www.3dgep.com/understanding-quaternions/
+0. https://probablydance.com/2017/08/05/intuitive-quaternions/
+0. [Quaternion algebras](https://math.dartmouth.edu/~jvoight/quat.html)
+0. [Rotations with quaternions](https://imadr.github.io/rotations-with-quaternions/)
# _Compendium of resources_
-1. [Free and Open-Source Textbooks](http://danaernst.com/resources/free-and-open-source-textbooks/)
-1. [ALL IN ONE MATHEMATICS CHEAT SHEET](https://ourway.keybase.pub/mathematics_cheat_sheet.pdf)
-1. https://github.com/llSourcell/learn_math_fast
-1. https://www.algorithm-archive.org/
-1. [3b1b featured creators #1](https://www.youtube.com/watch?v=VcgJro0sTiM)
-1. [An infinite descent into pure mathematics](https://infinitedescent.xyz/)
-1. https://hackernoon.com/be-a-better-programmer-with-these-40-mathematics-courses-d8ca48a2f8a2
-1. https://www.intmath.com/
-1. https://en.wikipedia.org/wiki/Graduate_Texts_in_Mathematics
+0. [Free and Open-Source Textbooks](http://danaernst.com/resources/free-and-open-source-textbooks/)
+0. [ALL IN ONE MATHEMATICS CHEAT SHEET](https://ourway.keybase.pub/mathematics_cheat_sheet.pdf)
+0. https://github.com/llSourcell/learn_math_fast
+0. https://www.algorithm-archive.org/
+0. [3b1b featured creators #1](https://www.youtube.com/watch?v=VcgJro0sTiM)
+0. [An infinite descent into pure mathematics](https://infinitedescent.xyz/)
+0. https://hackernoon.com/be-a-better-programmer-with-these-40-mathematics-courses-d8ca48a2f8a2
+0. https://www.intmath.com/
+0. https://en.wikipedia.org/wiki/Graduate_Texts_in_Mathematics
# Number systems
-1. https://en.wikipedia.org/wiki/Negative_base
+0. https://en.wikipedia.org/wiki/Negative_base
# Discrete mathematics
-1. [Applied Discrete Structures](http://discretemath.org/ads-latex/ads.pdf)
-1. [Notes on Discrete Mathematics](http://www.cs.yale.edu/homes/aspnes/classes/202/notes.pdf)
-1. [The system of integer functions, an efficient version of discrete mathematical analysis](https://arxiv.org/abs/1710.00676)
-1. [Computing the Continuous Discretely: Integer-Point Enumeration in Polyhedra](http://math.sfsu.edu/beck/papers/ccd.pdf)
-1. [Discrete Mathematics: An Open Introduction](http://discrete.openmathbooks.org/dmoi2/frontmatter.html)
+0. [Applied Discrete Structures](http://discretemath.org/ads-latex/ads.pdf)
+0. [Notes on Discrete Mathematics](http://www.cs.yale.edu/homes/aspnes/classes/202/notes.pdf)
+0. [The system of integer functions, an efficient version of discrete mathematical analysis](https://arxiv.org/abs/1710.00676)
+0. [Computing the Continuous Discretely: Integer-Point Enumeration in Polyhedra](http://math.sfsu.edu/beck/papers/ccd.pdf)
+0. [Discrete Mathematics: An Open Introduction](http://discrete.openmathbooks.org/dmoi2/frontmatter.html)
# Probability
-1. [Introduction to Probability at anadvanced leve](https://www.stat.berkeley.edu/~aditya/resources/AllLectures2018Fall201A.pdf)
+0. [Introduction to Probability at anadvanced leve](https://www.stat.berkeley.edu/~aditya/resources/AllLectures2018Fall201A.pdf)
# Linear Algebra
-1. [Linear Algebra And Multi Dimensional Geometry](https://mirtitles.org/2020/02/13/4129/)
-1. [Interactive Linear Algebra](https://textbooks.math.gatech.edu/ila/)
-1. [Don’t invert that matrix](https://www.johndcook.com/blog/2010/01/19/dont-invert-that-matrix/)
-1. [“Don’t invert that matrix” – why and how](https://civilstat.com/2015/07/dont-invert-that-matrix-why-and-how/)
-1. [Thirty-three Miniatures: Mathematical and Algorithmic Applications of Linear Algebra](https://kam.mff.cuni.cz/~matousek/stml-53-matousek-1.pdf)
-1. [Covectors are Different than Vectors, Usually](http://infohost.nmt.edu/~parendt/Phys509/notes/2diracnot/node4.html)
-1. [Introduction to Applied Linear Algebra: Vectors, Matrices, and Least Squares](https://web.stanford.edu/~boyd/vmls/vmls.pdf)
-1. [Linear Algebra Done Wrong.](http://www.math.brown.edu/~treil/papers/LADW/LADW.html)
-1. [Linear Algebra Done Right](http://linear.axler.net/)
-1. [Down with Determinants!](http://www.axler.net/DwD.html)
-1. https://github.com/jacobbogers/blasjs
-1. https://graphicallinearalgebra.net/
-1. [Wild Linear Algebra](https://www.youtube.com/watch?v=yAb12PWrhV0&list=PLIljB45xT85BhzJ-oWNug1YtUjfWp1qAp &&& https://www.youtube.com/watch?v=nJdWFoliRnc&list=PLIljB45xT85DF5G-Hq0xPsVUnR5_wJRSw)
-1. https://github.com/ferreiradaselva/mathc
-1. http://www.fast.ai/2017/07/17/num-lin-alg/
-1. https://github.com/bluemathsoft/bm-linalg
-1. [The Matrix Cookbook](https://www.math.uwaterloo.ca/~hwolkowi/matrixcookbook.pdf)
-1. https://dhruvp.netlify.com/2018/12/31/matrices/
-1. https://www.nalgebra.org/
-1. http://immersivemath.com/ila/index.html
-1. [Linear Logic and Linear Algebra](http://www.cs.bham.ac.uk/~drg/bll/steve.pdf)
-1. https://www.math3ma.com/blog/matrices-probability-graphs
-1. [Essence of linear algebra](https://www.youtube.com/watch?v=fNk_zzaMoSs&list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab)
-1. https://www.dhruvonmath.com/2018/12/31/matrices/
-1. http://blog.ezyang.com/2019/05/a-short-note-about-functional-linear-maps/
-1. https://www.math3ma.com/blog/matrices-as-tensor-network-diagrams
-1. [Convolution is outer product](https://arxiv.org/abs/1905.01289)
-1. [Graphical Calculus for products and convolutions](https://arxiv.org/abs/1903.01366)
-1. [3 Point Parameterization of Affine Transform](https://www.catid.io/affine3)
+0. [Linear Algebra And Multi Dimensional Geometry](https://mirtitles.org/2020/02/13/4129/)
+0. [Interactive Linear Algebra](https://textbooks.math.gatech.edu/ila/)
+0. [Don’t invert that matrix](https://www.johndcook.com/blog/2010/01/19/dont-invert-that-matrix/)
+0. [“Don’t invert that matrix” – why and how](https://civilstat.com/2015/07/dont-invert-that-matrix-why-and-how/)
+0. [Thirty-three Miniatures: Mathematical and Algorithmic Applications of Linear Algebra](https://kam.mff.cuni.cz/~matousek/stml-53-matousek-1.pdf)
+0. [Covectors are Different than Vectors, Usually](http://infohost.nmt.edu/~parendt/Phys509/notes/2diracnot/node4.html)
+0. [Introduction to Applied Linear Algebra: Vectors, Matrices, and Least Squares](https://web.stanford.edu/~boyd/vmls/vmls.pdf)
+0. [Linear Algebra Done Wrong.](http://www.math.brown.edu/~treil/papers/LADW/LADW.html)
+0. [Linear Algebra Done Right](http://linear.axler.net/)
+0. [Down with Determinants!](http://www.axler.net/DwD.html)
+0. https://github.com/jacobbogers/blasjs
+0. https://graphicallinearalgebra.net/
+0. [Wild Linear Algebra](https://www.youtube.com/watch?v=yAb12PWrhV0&list=PLIljB45xT85BhzJ-oWNug1YtUjfWp1qAp &&& https://www.youtube.com/watch?v=nJdWFoliRnc&list=PLIljB45xT85DF5G-Hq0xPsVUnR5_wJRSw)
+0. https://github.com/ferreiradaselva/mathc
+0. http://www.fast.ai/2017/07/17/num-lin-alg/
+0. https://github.com/bluemathsoft/bm-linalg
+0. [The Matrix Cookbook](https://www.math.uwaterloo.ca/~hwolkowi/matrixcookbook.pdf)
+0. https://dhruvp.netlify.com/2018/12/31/matrices/
+0. https://www.nalgebra.org/
+0. http://immersivemath.com/ila/index.html
+0. [Linear Logic and Linear Algebra](http://www.cs.bham.ac.uk/~drg/bll/steve.pdf)
+0. https://www.math3ma.com/blog/matrices-probability-graphs
+0. [Essence of linear algebra](https://www.youtube.com/watch?v=fNk_zzaMoSs&list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab)
+0. https://www.dhruvonmath.com/2018/12/31/matrices/
+0. http://blog.ezyang.com/2019/05/a-short-note-about-functional-linear-maps/
+0. https://www.math3ma.com/blog/matrices-as-tensor-network-diagrams
+0. [Convolution is outer product](https://arxiv.org/abs/1905.01289)
+0. [Graphical Calculus for products and convolutions](https://arxiv.org/abs/1903.01366)
+0. [3 Point Parameterization of Affine Transform](https://www.catid.io/affine3)
# Domain Theory
-1. [A Brief Intro to Domain Theory](https://www.alignmentforum.org/posts/4C4jha5SdReWgg7dF/a-brief-intro-to-domain-theory)
+0. [A Brief Intro to Domain Theory](https://www.alignmentforum.org/posts/4C4jha5SdReWgg7dF/a-brief-intro-to-domain-theory)
# Category Theory
-1. [Programming with Categories](https://www.youtube.com/watch?v=Y5YCE_mVjvg&list=PLhgq-BqyZ7i7MTGhUROZy3BOICnVixETS&index=1)
-1. [Awesome Applied Category Theory](https://github.com/statebox/awesome-applied-ct)
-1. [Categorical Query Language](https://www.categoricaldata.net/)
-1. [Abstract and Concrete Categories: The Joy of Cats](http://katmat.math.uni-bremen.de/acc/acc.pdf)
-1. https://bartoszmilewski.com/
-1. [YOW! Lambda Jam 2018 - Mark Hopkins -All of Basic Category Theory](https://www.youtube.com/watch?v=9u1q3lH7VbE)
-1. [Categorifying cardinal arithmetic](http://www.math.jhu.edu/~eriehl/arithmetic.pdf)
-1. https://bartoszmilewski.com/2014/10/28/category-theory-for-programmers-the-preface/
-1. [Elements of ∞-Category Theory](http://www.math.jhu.edu/~eriehl/elements.pdf)
-1. [Category Theory: A Gentle Introduction](https://www.logicmatters.net/resources/pdfs/GentleIntro.pdf)
-1. [Applied Category Theory (@ MIT 2019)](https://www.youtube.com/playlist?list=PLhgq-BqyZ7i5lOqOqqRiS0U5SwTmPpHQ5)
-1. https://jvns.ca/blog/2019/03/26/what-are-monoidal-categories/
-1. [Daniela Sfregola - A Pragmatic Introduction to Category Theories - Code Mesh 2017](https://www.youtube.com/watch?v=8XGFFMPHG0o)
-1. [Seven Sketches in Compositionality: An Invitation to Applied Category Theory](http://xahlee.info/math/i/category_theory_brendan_fong_david_spivak_2018-03.pdf)
+0. [Programming with Categories](https://www.youtube.com/watch?v=Y5YCE_mVjvg&list=PLhgq-BqyZ7i7MTGhUROZy3BOICnVixETS&index=1)
+0. [Awesome Applied Category Theory](https://github.com/statebox/awesome-applied-ct)
+0. [Categorical Query Language](https://www.categoricaldata.net/)
+0. [Abstract and Concrete Categories: The Joy of Cats](http://katmat.math.uni-bremen.de/acc/acc.pdf)
+0. https://bartoszmilewski.com/
+0. [YOW! Lambda Jam 2018 - Mark Hopkins -All of Basic Category Theory](https://www.youtube.com/watch?v=9u1q3lH7VbE)
+0. [Categorifying cardinal arithmetic](http://www.math.jhu.edu/~eriehl/arithmetic.pdf)
+0. https://bartoszmilewski.com/2014/10/28/category-theory-for-programmers-the-preface/
+0. [Elements of ∞-Category Theory](http://www.math.jhu.edu/~eriehl/elements.pdf)
+0. [Category Theory: A Gentle Introduction](https://www.logicmatters.net/resources/pdfs/GentleIntro.pdf)
+0. [Applied Category Theory (@ MIT 2019)](https://www.youtube.com/playlist?list=PLhgq-BqyZ7i5lOqOqqRiS0U5SwTmPpHQ5)
+0. https://jvns.ca/blog/2019/03/26/what-are-monoidal-categories/
+0. [Daniela Sfregola - A Pragmatic Introduction to Category Theories - Code Mesh 2017](https://www.youtube.com/watch?v=8XGFFMPHG0o)
+0. [Seven Sketches in Compositionality: An Invitation to Applied Category Theory](http://xahlee.info/math/i/category_theory_brendan_fong_david_spivak_2018-03.pdf)
# Direct Logic
-1. [Strong Types for Direct Logic](https://drive.google.com/file/d/1relKFB4aOMD2VZHM9qj3wWMXOq-q2AJr/view)
+0. [Strong Types for Direct Logic](https://drive.google.com/file/d/1relKFB4aOMD2VZHM9qj3wWMXOq-q2AJr/view)
# Geometric Algebra | Clifford Algebra
-1. [Siggraph2019 Geometric Algebra](https://www.youtube.com/watch?v=tX4H_ctggYo)
-1. [Dr Leo Dorst' Keynote talk at CGI2020](https://www.youtube.com/watch?v=T7xVTBpHMjA)
-1. [GAME2020 - 1. Dr. Leo Dorst. Get Real!](https://www.youtube.com/watch?v=0fF2xToQmgs)
-1. [GAME2020 3. Professor Anthony Lasenby. A new language for physics.](https://www.youtube.com/watch?v=x7eLEtmq6PY)
-1. [HestenesJMM2019](https://www.youtube.com/watch?v=zsQQ7djCg_Y)
-1. http://geocalc.clas.asu.edu/
-1. [Geometric Algebra](https://arxiv.org/abs/1205.5935)
-1. [A Swift Introduction to Geometric Algebra](https://www.youtube.com/watch?v=60z_hpEAtD8)
-1. [Euclidean Geometry and Geometric Algebra](http://geometry.mrao.cam.ac.uk/2020/06/euclidean-geometry-and-geometric-algebra/)
-1. [Plane-based Geometric Algebra for Computer Science](https://bivector.net/PGA4CS.html)
-1. [Differential geometric algebra foundations: Grassmann.jl Ascend](https://www.youtube.com/watch?v=7hlDRLEhc8o&feature=youtu.be)
-1. [Projective Geometric Algebra Done Right](http://terathon.com/blog/projective-geometric-algebra-done-right/)
-1. [Introduction to Clifford Algebra](https://www.av8n.com/physics/clifford-intro.htm)
-1. [An Introduction to Geometric Algebra over R^2](https://bitworking.org/news/ga/2d)
-1. [Exterior Product](https://medium.com/@marksaroufim/exterior-product-ecd5836c28ab)
-1. [Projective geometric algebra: A modern framework for doing geometry](http://page.math.tu-berlin.de/~gunn/PGA/index.html)
-1. [Geometric Algebra for Computer Graphics](https://slides.com/enkimute/siggraph/#/)
-1. https://bivector.net/
-1. https://slehar.wordpress.com/2014/03/18/clifford-algebra-a-visual-introduction/
-1. [Vectors and Beyond: Geometric Algebra and its Philosophical Significance](http://www.tara.tcd.ie/bitstream/handle/2262/61825/Vectors%20and%20Beyond%20as%20Printed.pdf?sequence=1&isAllowed=y)
-1. [Let's remove Quaternions from every 3D Engine](http://marctenbosch.com/quaternions/)
-1. [Geometric Algebra Playlist](https://www.youtube.com/playlist?list=PLLvlxwbzkr7igd6bL7959WWE7XInCCevt)
-1. https://github.com/wolftype/versor
-1. [Exploring Physics with Geometric Algebra, Book 1](http://peeterjoot.com/archives/math2015/gabookI.pdf)
-1. [Joan Lasenby on Applications of Geometric Algebra in Engineering](https://www.youtube.com/watch?v=ikCIUzX9myY)
-1. https://www.amazon.com/Geometric-Algebra-Computer-Graphics-Vince/dp/1846289963
-1. https://www.amazon.com/Geometric-Algebra-Computer-Science-Revised/dp/0123749425
-1. https://www.amazon.com/Space-Time-Algebra-David-Hestenes/dp/3319184121
-1. https://www.amazon.com/Introduction-Clifford-Algebras-Spinors/dp/0198782926
-1. https://gist.github.com/pervognsen/b204bf31af0809af078617af1609c8b8
-1. [Fundamentals of Grassmann Algebra](http://www.terathon.com/gdc12_lengyel.pdf)
-1. https://github.com/chakravala/Grassmann.jl
+0. [Symplectic Geometry meets Geometric Algebra in 2D](https://www.researchgate.net/publication/356781838_Symplectic_Geometry_meets_Geometric_Algebra_in_2D)
+0. [Siggraph2019 Geometric Algebra](https://www.youtube.com/watch?v=tX4H_ctggYo)
+0. [Dr Leo Dorst' Keynote talk at CGI2020](https://www.youtube.com/watch?v=T7xVTBpHMjA)
+0. [GAME2020 - 1. Dr. Leo Dorst. Get Real!](https://www.youtube.com/watch?v=0fF2xToQmgs)
+0. [GAME2020 3. Professor Anthony Lasenby. A new language for physics.](https://www.youtube.com/watch?v=x7eLEtmq6PY)
+0. [HestenesJMM2019](https://www.youtube.com/watch?v=zsQQ7djCg_Y)
+0. http://geocalc.clas.asu.edu/
+0. [Geometric Algebra](https://arxiv.org/abs/1205.5935)
+0. [A Swift Introduction to Geometric Algebra](https://www.youtube.com/watch?v=60z_hpEAtD8)
+0. [Euclidean Geometry and Geometric Algebra](http://geometry.mrao.cam.ac.uk/2020/06/euclidean-geometry-and-geometric-algebra/)
+0. [Plane-based Geometric Algebra for Computer Science](https://bivector.net/PGA4CS.html)
+0. [Differential geometric algebra foundations: Grassmann.jl Ascend](https://www.youtube.com/watch?v=7hlDRLEhc8o&feature=youtu.be)
+0. [Projective Geometric Algebra Done Right](http://terathon.com/blog/projective-geometric-algebra-done-right/)
+0. [Introduction to Clifford Algebra](https://www.av8n.com/physics/clifford-intro.htm)
+0. [An Introduction to Geometric Algebra over R^2](https://bitworking.org/news/ga/2d)
+0. [Exterior Product](https://medium.com/@marksaroufim/exterior-product-ecd5836c28ab)
+0. [Projective geometric algebra: A modern framework for doing geometry](http://page.math.tu-berlin.de/~gunn/PGA/index.html)
+0. [Geometric Algebra for Computer Graphics](https://slides.com/enkimute/siggraph/#/)
+0. https://bivector.net/
+0. https://slehar.wordpress.com/2014/03/18/clifford-algebra-a-visual-introduction/
+0. [Vectors and Beyond: Geometric Algebra and its Philosophical Significance](http://www.tara.tcd.ie/bitstream/handle/2262/61825/Vectors%20and%20Beyond%20as%20Printed.pdf?sequence=1&isAllowed=y)
+0. [Let's remove Quaternions from every 3D Engine](http://marctenbosch.com/quaternions/)
+0. [Geometric Algebra Playlist](https://www.youtube.com/playlist?list=PLLvlxwbzkr7igd6bL7959WWE7XInCCevt)
+0. https://github.com/wolftype/versor
+0. [Exploring Physics with Geometric Algebra, Book 1](http://peeterjoot.com/archives/math2015/gabookI.pdf)
+0. [Joan Lasenby on Applications of Geometric Algebra in Engineering](https://www.youtube.com/watch?v=ikCIUzX9myY)
+0. https://www.amazon.com/Geometric-Algebra-Computer-Graphics-Vince/dp/1846289963
+0. https://www.amazon.com/Geometric-Algebra-Computer-Science-Revised/dp/0123749425
+0. https://www.amazon.com/Space-Time-Algebra-David-Hestenes/dp/3319184121
+0. https://www.amazon.com/Introduction-Clifford-Algebras-Spinors/dp/0198782926
+0. https://gist.github.com/pervognsen/b204bf31af0809af078617af1609c8b8
+0. [Fundamentals of Grassmann Algebra](http://www.terathon.com/gdc12_lengyel.pdf)
+0. https://github.com/chakravala/Grassmann.jl
# Abstract Algebra
-1. [A Brief Guide to A Few Algebraic Structures](https://argumatronic.com//posts/2019-06-21-algebra-cheatsheet.html)
-1. [DUALITY FOR GROUPS](https://projecteuclid.org/download/pdf_1/euclid.bams/1183515045)
-1. https://gowers.wordpress.com/2011/11/20/normal-subgroups-and-quotient-groups/
-1. [Abstract Algebra: Theory and Applications](http://abstract.ups.edu/)
-1. [Group Theory](http://birdtracks.eu/version9.0/GroupTheory.pdf)
-1. [VISUAL GROUP THEORY](http://web.bentley.edu/empl/c/ncarter/vgt/index.html)
-1. [THE GEOMETRY OF REFLECTION GROUPS](http://people.mpim-bonn.mpg.de/geordie/mpg.pdf)
-1. https://kubuszok.com/2018/algebras-we-love/
-1. [Notes on Computational Group Theory](https://www.math.colostate.edu/~hulpke/CGT/cgtnotes.pdf)
-1. [An Invitation to General Algebra and Universal Constructions](https://math.berkeley.edu/~gbergman/245/)
+0. [A Brief Guide to A Few Algebraic Structures](https://argumatronic.com//posts/2019-06-21-algebra-cheatsheet.html)
+0. [DUALITY FOR GROUPS](https://projecteuclid.org/download/pdf_1/euclid.bams/1183515045)
+0. https://gowers.wordpress.com/2011/11/20/normal-subgroups-and-quotient-groups/
+0. [Abstract Algebra: Theory and Applications](http://abstract.ups.edu/)
+0. [Group Theory](http://birdtracks.eu/version9.0/GroupTheory.pdf)
+0. [VISUAL GROUP THEORY](http://web.bentley.edu/empl/c/ncarter/vgt/index.html)
+0. [THE GEOMETRY OF REFLECTION GROUPS](http://people.mpim-bonn.mpg.de/geordie/mpg.pdf)
+0. https://kubuszok.com/2018/algebras-we-love/
+0. [Notes on Computational Group Theory](https://www.math.colostate.edu/~hulpke/CGT/cgtnotes.pdf)
+0. [An Invitation to General Algebra and Universal Constructions](https://math.berkeley.edu/~gbergman/245/)
# Logic
-1. http://openlogicproject.org/
+0. http://openlogicproject.org/
# Calculus
-1. [The Fractional Derivative, what is it? | Introduction to Fractional Calculus](https://www.youtube.com/watch?v=A4sTAKN6yFA)
-1. [Calculus on Manifolds](http://strangebeautiful.com/other-texts/spivak-calc-manifolds.pdf)
-1. [Calculus BLUE](https://www.youtube.com/watch?v=Jes5jwLl1q8&list=PL8erL0pXF3JYm7VaTdKDaWc8Q3FuP8Sa7)
-1. [Extending the Algebraic Manipulability of Differentials](https://arxiv.org/abs/1801.09553)
-1. https://en.wikipedia.org/wiki/Fractional_calculus
-1. https://medium.com/@notaredpanda/fractional-calculus-48192f4e9c9f
-1. [Fractional Calculus: Theory and Applications](https://www.mdpi.com/books/pdfview/book/755)
-1. [EXTENDING THE ALGEBRAIC MANIPULABILITYOF DIFFERENTIALS](http://online.watsci.org/abstract_pdf/2019v26/v26n3a-pdf/4.pdf)
-1. [Finite Calculus: A Tutorial for Solving Nasty Sums](https://www.cs.purdue.edu/homes/dgleich/publications/Gleich%202005%20-%20finite%20calculus.pdf)
-1. http://jliszka.github.io/2013/10/24/exact-numeric-nth-derivatives.html
+0. [What is Jacobian? | The right way of thinking derivatives and integrals](https://www.youtube.com/watch?v=wCZ1VEmVjVo)
+0. [The Fractional Derivative, what is it? | Introduction to Fractional Calculus](https://www.youtube.com/watch?v=A4sTAKN6yFA)
+0. [Calculus on Manifolds](http://strangebeautiful.com/other-texts/spivak-calc-manifolds.pdf)
+0. [Calculus BLUE](https://www.youtube.com/watch?v=Jes5jwLl1q8&list=PL8erL0pXF3JYm7VaTdKDaWc8Q3FuP8Sa7)
+0. [Extending the Algebraic Manipulability of Differentials](https://arxiv.org/abs/1801.09553)
+0. https://en.wikipedia.org/wiki/Fractional_calculus
+0. https://medium.com/@notaredpanda/fractional-calculus-48192f4e9c9f
+0. [Fractional Calculus: Theory and Applications](https://www.mdpi.com/books/pdfview/book/755)
+0. [EXTENDING THE ALGEBRAIC MANIPULABILITYOF DIFFERENTIALS](http://online.watsci.org/abstract_pdf/2019v26/v26n3a-pdf/4.pdf)
+0. [Finite Calculus: A Tutorial for Solving Nasty Sums](https://www.cs.purdue.edu/homes/dgleich/publications/Gleich%202005%20-%20finite%20calculus.pdf)
+0. http://jliszka.github.io/2013/10/24/exact-numeric-nth-derivatives.html
# Continuous Calculus
-1. [Continuous Calculus](http://www-users.math.umn.edu/~olver/ln_/cc.pdf)
+0. [Continuous Calculus](http://www-users.math.umn.edu/~olver/ln_/cc.pdf)
# Octonion
-1. http://math.ucr.edu/home/baez/octonions/
+0. http://math.ucr.edu/home/baez/octonions/
# Differential Geometry
-1. [differential geometry reconstructed: a unified systematic framework](http://www.geometry.org/tex/conc/dgstats.php)
-1. [Differential geometry reconstructed: a unified systematic framework](http://www.topology.org/tex/conc/dg.html)
+0. [differential geometry reconstructed: a unified systematic framework](http://www.geometry.org/tex/conc/dgstats.php)
+0. [Differential geometry reconstructed: a unified systematic framework](http://www.topology.org/tex/conc/dg.html)
# Information Theory
-1. [Functional Bits: Lambda Calculus based Algorithmic Information Theory](https://tromp.github.io/cl/LC.pdf)
+0. [Functional Bits: Lambda Calculus based Algorithmic Information Theory](https://tromp.github.io/cl/LC.pdf)
# Graph Theory
-1. [Graphs and Geometry](http://web.cs.elte.hu/~lovasz/bookxx/geomgraphbook/geombook2019.01.11.pdf)
-1. [Graph-Based Algorithms for Boolean Function Manipulation](http://mtv.ece.ucsb.edu/courses/ece156B_14/randy_obdd86.pdf)
-1. [better geometry through graph theory](http://ideolalia.com/2018/08/28/artifex.html)
+0. [Graphs and Geometry](http://web.cs.elte.hu/~lovasz/bookxx/geomgraphbook/geombook2019.01.11.pdf)
+0. [Graph-Based Algorithms for Boolean Function Manipulation](http://mtv.ece.ucsb.edu/courses/ece156B_14/randy_obdd86.pdf)
+0. [better geometry through graph theory](http://ideolalia.com/2018/08/28/artifex.html)
# Division by Zero
-1. [29. Dividing by zero to invert matrices](https://graphicallinearalgebra.net/2016/06/22/29-inverting-matrices-and-dividing-by-zero/)
-1. https://www.hillelwayne.com/post/divide-by-zero/
-1. https://www.1dividedby0.com/
+0. [29. Dividing by zero to invert matrices](https://graphicallinearalgebra.net/2016/06/22/29-inverting-matrices-and-dividing-by-zero/)
+0. https://www.hillelwayne.com/post/divide-by-zero/
+0. https://www.1dividedby0.com/
# Partial Fractions
-1. https://jaydaigle.net/blog/calculus/easier-partial-fractions/
+0. https://jaydaigle.net/blog/calculus/easier-partial-fractions/
# Non-commutative Algebra
-1. [An Invitation to Noncommutative Algebra](https://arxiv.org/abs/1808.03172)
+0. [An Invitation to Noncommutative Algebra](https://arxiv.org/abs/1808.03172)
# Lambda Calculus
-1. https://medium.com/@maiavictor/the-abstract-calculus-fe8c46bcf39c
+0. https://medium.com/@maiavictor/the-abstract-calculus-fe8c46bcf39c
# _Software Library_
-1. https://github.com/arguiot/TheoremJS
-1. https://github.com/arguiot/Descartes
+0. https://github.com/arguiot/TheoremJS
+0. https://github.com/arguiot/Descartes
# Set Theory
-1. [Set Theory and Algebra in Computer Science: A Gentle Introduction to Mathematical Modeling](https://pdfs.semanticscholar.org/d106/6b6de601c1d7d5af25af3f7091bc7ad3ad51.pdf)
+0. [Set Theory and Algebra in Computer Science: A Gentle Introduction to Mathematical Modeling](https://pdfs.semanticscholar.org/d106/6b6de601c1d7d5af25af3f7091bc7ad3ad51.pdf)
# Uncertainty Theory
-1. http://faculty.math.tsinghua.edu.cn/~bliu/ut.pdf
-1. [An Introduction to the Mathematics of Uncertainty: including Set Theory, Logic, Probability, Fuzzy Sets, Rough Sets, and Evidence Theory](https://www.creighton.edu/fileadmin/user/CCAS/programs/fuzzy_math/docs/MOU.pdf)
+0. http://faculty.math.tsinghua.edu.cn/~bliu/ut.pdf
+0. [An Introduction to the Mathematics of Uncertainty: including Set Theory, Logic, Probability, Fuzzy Sets, Rough Sets, and Evidence Theory](https://www.creighton.edu/fileadmin/user/CCAS/programs/fuzzy_math/docs/MOU.pdf)
# Computational Geometry
-1. [CMPT 813: Computational Geometry (Fall 2011)](http://www.cs.sfu.ca/~binay/813.2011/)
-1. https://www.johndcook.com/blog/2018/09/26/polygon-area/
-1. http://s2geometry.io/devguide/s2cell_hierarchy.html
-1. http://alienryderflex.com/polygon/
-1. https://libigl.github.io/
+0. [CMPT 813: Computational Geometry (Fall 2011)](http://www.cs.sfu.ca/~binay/813.2011/)
+0. https://www.johndcook.com/blog/2018/09/26/polygon-area/
+0. http://s2geometry.io/devguide/s2cell_hierarchy.html
+0. http://alienryderflex.com/polygon/
+0. https://libigl.github.io/
# Finitism
-1. ["REAL" ANALYSIS Is A DEGENERATE CASE of DISCRETE ANALYSIS](http://sites.math.rutgers.edu/~zeilberg/mamarim/mamarimPDF/real.pdf)
+0. ["REAL" ANALYSIS Is A DEGENERATE CASE of DISCRETE ANALYSIS](http://sites.math.rutgers.edu/~zeilberg/mamarim/mamarimPDF/real.pdf)
# Linear programming
-1. https://en.wikibooks.org/wiki/GLPK
-1. https://white.ucc.asn.au/2018/05/28/Optimizing-your-diet-with-JuMP.html
+0. https://en.wikibooks.org/wiki/GLPK
+0. https://white.ucc.asn.au/2018/05/28/Optimizing-your-diet-with-JuMP.html
# Measure theory
-1. [Resources for Learning Measure Theory](https://bcmullins.github.io/measure_theory_resources/)
+0. [Resources for Learning Measure Theory](https://bcmullins.github.io/measure_theory_resources/)
# Combinatorics
-1. [Advances in Combinatorics](https://www.advancesincombinatorics.com/)
-1. http://andy.kitchen/combinations.html
-1. [Combinatorial Algorithms](http://www2.denizyuret.com/bib/kreher/donald1999combinatorial/combinatorialA.pdf)
+0. [Advances in Combinatorics](https://www.advancesincombinatorics.com/)
+0. http://andy.kitchen/combinations.html
+0. [Combinatorial Algorithms](http://www2.denizyuret.com/bib/kreher/donald1999combinatorial/combinatorialA.pdf)
# Vector
-1. [A Student's Guide to Vectors and Tensors (Student's Guides)](https://www.amazon.com/Students-Guide-Vectors-Tensors-Guides/dp/0521171903)
-1. https://www.researchgate.net/publication/327989714_Coordinate_Free_Vector_Algebra_in_R2
+0. [A Student's Guide to Vectors and Tensors (Student's Guides)](https://www.amazon.com/Students-Guide-Vectors-Tensors-Guides/dp/0521171903)
+0. https://www.researchgate.net/publication/327989714_Coordinate_Free_Vector_Algebra_in_R2
# Knot theory
-1. [KNOT THEORY and ITS APPLICATIONS](https://www.maths.ed.ac.uk/~v1ranick/papers/murasug3.pdf)
-1. [Primes and Knots - Akshay Venkatesh](https://www.youtube.com/watch?v=jvoYgNYKyk0)
-1. [The Knot Book](http://math.harvard.edu/~ctm/home/text/books/adams/knot_book/knot_book.pdf)
+0. [KNOT THEORY and ITS APPLICATIONS](https://www.maths.ed.ac.uk/~v1ranick/papers/murasug3.pdf)
+0. [Primes and Knots - Akshay Venkatesh](https://www.youtube.com/watch?v=jvoYgNYKyk0)
+0. [The Knot Book](http://math.harvard.edu/~ctm/home/text/books/adams/knot_book/knot_book.pdf)
# Axiom
-1. [INTRODUCTION TO AXIOMATIC REASONING](http://www.math.harvard.edu/~mazur/papers/Axiomatic.pdf)
+0. [INTRODUCTION TO AXIOMATIC REASONING](http://www.math.harvard.edu/~mazur/papers/Axiomatic.pdf)
# Differential equations
-1. [ELEMENTARY DIFFERENTIAL EQUATIONS](http://ramanujan.math.trinity.edu/wtrench/texts/TRENCH_FREE_DIFFEQ_I.PDF)
-1. [Lecture Notes on Difference Equations](http://people.math.aau.dk/~matarne/11-imat/notes2011a.pdf)
+0. [ELEMENTARY DIFFERENTIAL EQUATIONS](http://ramanujan.math.trinity.edu/wtrench/texts/TRENCH_FREE_DIFFEQ_I.PDF)
+0. [Lecture Notes on Difference Equations](http://people.math.aau.dk/~matarne/11-imat/notes2011a.pdf)
# Algebraic geometry
-1. http://nautil.us/issue/69/patterns/the-math-that-takes-newton-into-the-quantum-world
-1. [Algebraic Geometry](http://www.mathematik.uni-kl.de/~gathmann/class/alggeom-2014/main.pdf)
-1. https://en.wikipedia.org/wiki/Superformula
+0. http://nautil.us/issue/69/patterns/the-math-that-takes-newton-into-the-quantum-world
+0. [Algebraic Geometry](http://www.mathematik.uni-kl.de/~gathmann/class/alggeom-2014/main.pdf)
+0. https://en.wikipedia.org/wiki/Superformula
# Physics
-1. https://www.researchgate.net/publication/309533409_Beyond_Einstein_non-local_physics
-1. https://www.theoretical-physics.com/dev/index.html
+0. https://www.researchgate.net/publication/309533409_Beyond_Einstein_non-local_physics
+0. https://www.theoretical-physics.com/dev/index.html
# Spherical trigonometry
-1. https://en.wikipedia.org/wiki/Haversine_formula
+0. https://en.wikipedia.org/wiki/Haversine_formula
# Hyperbolic geometry
-1. [Intuitive Guide to Hyperbolic Functions](https://betterexplained.com/articles/hyperbolic-functions/)
-1. [Hyperbolic Functions and Non-Hyperbolic Claims](https://elliptigon.com/hyperbolic-functions-explained/)
+0. [Intuitive Guide to Hyperbolic Functions](https://betterexplained.com/articles/hyperbolic-functions/)
+0. [Hyperbolic Functions and Non-Hyperbolic Claims](https://elliptigon.com/hyperbolic-functions-explained/)
# **Temp Cache**
-1. https://mathlets.org/mathlets/
-1. [Quadratic splines are useful too](https://wordsandbuttons.online/quadric_splines_are_useful_too.html)
-1. [Derivations of Applied Mathematics](http://www.derivations.org/)
-1. https://www.juliahomotopycontinuation.org/
-1. https://marginalrevolution.com/marginalrevolution/2018/05/one-parameter-equation-can-exactly-fit-scatter-plot.html
-1. https://plato.stanford.edu/entries/mathematics-inconsistent/
-1. http://immersivemath.com/ila/index.html?m=1
-1. https://stacks.math.columbia.edu/
-1. http://www.gutenberg.org/ebooks/17384
-1. http://illustratedtheoryofnumbers.com/
-1. [Construction of the Transreal Numbers and Algebraic Transfields](http://www.iaeng.org/IJAM/issues_v46/issue_1/IJAM_46_1_03.pdf)
-1. http://simit-lang.org/language
-1. http://wykobi.com/tutorial0.html
-1. https://pron.github.io/computation-logic-algebra
-1. https://github.com/rossant/awesome-math
-1. [Algebra, Topology, Differential Calculus, and Optimization Theory For Computer Science and Engineering](https://www.cis.upenn.edu/~jean/math-basics.pdf)
-1. http://math.chapman.edu/~jipsen/structures/doku.php/
-1. http://stacks.math.columbia.edu/browse
-1. https://bitworking.org/news/ga/2d
-1. https://www.youtube.com/watch?v=OmJ-4B-mS-Y
-1. https://www.youtube.com/watch?v=ZihywtixUYo
-1. https://www.youtube.com/user/njwildberger
-1. http://www.hedonisticlearning.com/posts/category-theory-syntactically.html
-1. https://www.youtube.com/watch?v=EA1FFtTGAfw&list=PLSekr_gm4hWLRNHB5-sbajyUzN5tLOZmx
-1. https://www.artofproblemsolving.com/wiki/index.php/Modular_arithmetic/Introduction
-1. [Mathematics for Computer Science](https://courses.csail.mit.edu/6.042/spring17/mcs.pdf)
-1. http://www.paultaylor.eu/ASD/foufct/
-1. [Toward the Unification of Physics and Number Theory](http://www.quantumgravityresearch.org/wp-content/uploads/2017/02/Toward-the-Unification-of-Physics2-1.pdf)
-1. https://jeremykun.com/2014/03/13/programming-with-finite-fields/
-1. https://courses.cs.washington.edu/courses/cse590b/13au/
-1. http://magma.maths.usyd.edu.au/magma/
-1. [A VIEW OF MATHEMATICS](http://www.alainconnes.org/docs/maths.pdf)
-1. [Introduction to Tensor Analysis and the Calculus of Moving Surfaces](https://www.amazon.com/gp/product/1461478669)
-1. https://en.wikipedia.org/wiki/Wheel_theory
-1. http://wordsandbuttons.online/interactive_guide_to_homogeneous_coordinates.html
-1. https://a-guide-to-the-purescript-numeric-hierarchy.readthedocs.io/en/latest/index.html
-1. http://blog.wolfram.com/2016/12/22/the-semantic-representation-of-pure-mathematics/
-1. https://www.youtube.com/watch?v=psSyM1zp82k
-1. [Viviane Pons - Experimental pure mathematics using Sage - PyCon 2015](https://www.youtube.com/watch?v=3LZiZKgVjaU)
-1. http://www.sagemath.org/
-1. [The axioms of constructive geometry](https://www.sciencedirect.com/science/article/pii/0168007295000052)
-1. https://www.quora.com/What-is-it-like-to-understand-advanced-mathematics-Does-it-feel-analogous-to-having-mastery-of-another-language-like-in-programming-or-linguistics/answers/873950?share=1
-1. http://www.tricki.org/tricki/map
-1. https://maxow.github.io/posts/computational-geometry-set-operations-on-polytopes.html
-1. http://blog.robertelder.org/fast-multiplication-using-fourier-transform/
-1. [Graphical Models in a Nutshell](https://ai.stanford.edu/~koller/Papers/Koller+al:SRL07.pdf)
+0. https://mathlets.org/mathlets/
+0. [Quadratic splines are useful too](https://wordsandbuttons.online/quadric_splines_are_useful_too.html)
+0. [Derivations of Applied Mathematics](http://www.derivations.org/)
+0. https://www.juliahomotopycontinuation.org/
+0. https://marginalrevolution.com/marginalrevolution/2018/05/one-parameter-equation-can-exactly-fit-scatter-plot.html
+0. https://plato.stanford.edu/entries/mathematics-inconsistent/
+0. http://immersivemath.com/ila/index.html?m=1
+0. https://stacks.math.columbia.edu/
+0. http://www.gutenberg.org/ebooks/17384
+0. http://illustratedtheoryofnumbers.com/
+0. [Construction of the Transreal Numbers and Algebraic Transfields](http://www.iaeng.org/IJAM/issues_v46/issue_1/IJAM_46_1_03.pdf)
+0. http://simit-lang.org/language
+0. http://wykobi.com/tutorial0.html
+0. https://pron.github.io/computation-logic-algebra
+0. https://github.com/rossant/awesome-math
+0. [Algebra, Topology, Differential Calculus, and Optimization Theory For Computer Science and Engineering](https://www.cis.upenn.edu/~jean/math-basics.pdf)
+0. http://math.chapman.edu/~jipsen/structures/doku.php/
+0. http://stacks.math.columbia.edu/browse
+0. https://bitworking.org/news/ga/2d
+0. https://www.youtube.com/watch?v=OmJ-4B-mS-Y
+0. https://www.youtube.com/watch?v=ZihywtixUYo
+0. https://www.youtube.com/user/njwildberger
+0. http://www.hedonisticlearning.com/posts/category-theory-syntactically.html
+0. https://www.youtube.com/watch?v=EA1FFtTGAfw&list=PLSekr_gm4hWLRNHB5-sbajyUzN5tLOZmx
+0. https://www.artofproblemsolving.com/wiki/index.php/Modular_arithmetic/Introduction
+0. [Mathematics for Computer Science](https://courses.csail.mit.edu/6.042/spring17/mcs.pdf)
+0. http://www.paultaylor.eu/ASD/foufct/
+0. [Toward the Unification of Physics and Number Theory](http://www.quantumgravityresearch.org/wp-content/uploads/2017/02/Toward-the-Unification-of-Physics2-1.pdf)
+0. https://jeremykun.com/2014/03/13/programming-with-finite-fields/
+0. https://courses.cs.washington.edu/courses/cse590b/13au/
+0. http://magma.maths.usyd.edu.au/magma/
+0. [A VIEW OF MATHEMATICS](http://www.alainconnes.org/docs/maths.pdf)
+0. [Introduction to Tensor Analysis and the Calculus of Moving Surfaces](https://www.amazon.com/gp/product/1461478669)
+0. https://en.wikipedia.org/wiki/Wheel_theory
+0. http://wordsandbuttons.online/interactive_guide_to_homogeneous_coordinates.html
+0. https://a-guide-to-the-purescript-numeric-hierarchy.readthedocs.io/en/latest/index.html
+0. http://blog.wolfram.com/2016/12/22/the-semantic-representation-of-pure-mathematics/
+0. https://www.youtube.com/watch?v=psSyM1zp82k
+0. [Viviane Pons - Experimental pure mathematics using Sage - PyCon 2015](https://www.youtube.com/watch?v=3LZiZKgVjaU)
+0. http://www.sagemath.org/
+0. [The axioms of constructive geometry](https://www.sciencedirect.com/science/article/pii/0168007295000052)
+0. https://www.quora.com/What-is-it-like-to-understand-advanced-mathematics-Does-it-feel-analogous-to-having-mastery-of-another-language-like-in-programming-or-linguistics/answers/873950?share=1
+0. http://www.tricki.org/tricki/map
+0. https://maxow.github.io/posts/computational-geometry-set-operations-on-polytopes.html
+0. http://blog.robertelder.org/fast-multiplication-using-fourier-transform/
+0. [Graphical Models in a Nutshell](https://ai.stanford.edu/~koller/Papers/Koller+al:SRL07.pdf)
diff --git a/documentation/bookmark/math/geometry/computational.md b/documentation/bookmark/math/geometry/computational.md
new file mode 100644
index 000000000..846b1556c
--- /dev/null
+++ b/documentation/bookmark/math/geometry/computational.md
@@ -0,0 +1,4 @@
+# Reference
+
+0. [Primitives for Computational Geometry](https://graphics.stanford.edu/courses/cs348a-17-winter/Papers/Stolfi_Primitives_DECSRC_Report.pdf)
+
diff --git a/documentation/bookmark/math/geometry/dimension.md b/documentation/bookmark/math/geometry/dimension.md
new file mode 100644
index 000000000..d896be446
--- /dev/null
+++ b/documentation/bookmark/math/geometry/dimension.md
@@ -0,0 +1,4 @@
+# Reference
+
+0. [Beyond the Third Dimension](https://www.math.brown.edu/tbanchof/Beyond3d/index.html)
+
diff --git a/documentation/bookmark/memory_management.md b/documentation/bookmark/memory_management.md
index 5b7510df8..69ff6baeb 100644
--- a/documentation/bookmark/memory_management.md
+++ b/documentation/bookmark/memory_management.md
@@ -1,46 +1,50 @@
# Static
-1. [ASAP: As Static As Possible memory management](https://www.cl.cam.ac.uk/techreports/UCAM-CL-TR-908.pdf)
+0. [ASAP: As Static As Possible memory management](https://www.cl.cam.ac.uk/techreports/UCAM-CL-TR-908.pdf)
# Allocation
-1. [Always Bump Downwards](https://fitzgeraldnick.com/2019/11/01/always-bump-downwards.html)
+0. [Always Bump Downwards](https://fitzgeraldnick.com/2019/11/01/always-bump-downwards.html)
# Compaction
-1. ["Compacting the Uncompactable" by Bobby Powers](https://www.youtube.com/watch?v=c1UBJbfR-H0)
+0. ["Compacting the Uncompactable" by Bobby Powers](https://www.youtube.com/watch?v=c1UBJbfR-H0)
# Reference counting
-1. [Perceus: Garbage Free Reference Counting with Reuse (Extended version)](https://www.microsoft.com/en-us/research/publication/perceus-garbage-free-reference-counting-with-reuse/)
-1. [Introducing --gc:arc](https://forum.nim-lang.org/t/5734)
-1. [Counting Immutable Beans: Reference Counting Optimized for Purely Functional Programming](https://arxiv.org/abs/1908.05647)
+0. [Perceus: Garbage Free Reference Counting with Reuse (Extended version)](https://www.microsoft.com/en-us/research/publication/perceus-garbage-free-reference-counting-with-reuse/)
+0. [Introducing --gc:arc](https://forum.nim-lang.org/t/5734)
+0. [Counting Immutable Beans: Reference Counting Optimized for Purely Functional Programming](https://arxiv.org/abs/1908.05647)
# Layout
-1. [Floorplan: Spatial Layout in Memory Management Systems](https://conf.researchr.org/details/gpce-2019/gpce-2019-papers/6/Floorplan-Spatial-Layout-in-Memory-Management-Systems)
+0. [Floorplan: Spatial Layout in Memory Management Systems](https://conf.researchr.org/details/gpce-2019/gpce-2019-papers/6/Floorplan-Spatial-Layout-in-Memory-Management-Systems)
# Garbage collection
-1. [Deconstructing the Garbage-First Collector](https://users.cecs.anu.edu.au/~steveb/pubs/papers/g1-vee-2020.pdf)
-1. [The Garbage Collection Handbook](http://gchandbook.org/)
-1. [Baby's First Garbage Collector](http://journal.stuffwithstuff.com/2013/12/08/babys-first-garbage-collector/)
+0. [Deconstructing the Garbage-First Collector](https://users.cecs.anu.edu.au/~steveb/pubs/papers/g1-vee-2020.pdf)
+0. [The Garbage Collection Handbook](http://gchandbook.org/)
+0. [Baby's First Garbage Collector](http://journal.stuffwithstuff.com/2013/12/08/babys-first-garbage-collector/)
+
+# Smart references
+
+0. [Smart References: There and Back Again - Erik Valkering [ CppCon 2018 ]](https://www.youtube.com/watch?v=bfm9m3xJQRY)
# Reference
-1. [Relative Pointers](https://www.gingerbill.org/article/2020/05/17/relative-pointers/)
-1. [Scopes Describe Frames: A Uniform Model for Memory Layout in Dynamic Semantics](http://drops.dagstuhl.de/opus/volltexte/2016/6114/)
-1. https://uridiumauthor.blogspot.com/2018/06/memory-management.html
-1. https://github.com/mtrebi/memory-allocators
-1. http://www.newlisp.org/MemoryManagement.html
-1. http://gee.cs.oswego.edu/dl/html/malloc.html
-1. https://shipilev.net/blog/2014/jmm-pragmatics/
-1. https://floooh.github.io/2018/06/17/handles-vs-pointers.html
-1. https://www.codemag.com/Article/1807051/Introducing-.NET-Core-2.1-Flagship-Types-Span-T-and-Memory-T
-1. https://stefansf.de/post/pointers-are-more-abstract-than-you-might-expect/
-1. [Memory Management Reference](https://www.memorymanagement.org/)
-1. [Pseudomonarchia jemallocum: The false kingdom of jemalloc, or On exploiting the jemalloc memory manager](http://phrack.com/issues/68/10.html#article)
-1. https://gankro.github.io/blah/rust-layouts-and-abis/
-1. https://paul.bone.id.au/2018/10/19/gc-falsehoods/
-1. [Safe Programming with Pointers through Stateful Views](https://www.cs.bu.edu/~hwxi/academic/papers/padl05.pdf)
+0. [Relative Pointers](https://www.gingerbill.org/article/2020/05/17/relative-pointers/)
+0. [Scopes Describe Frames: A Uniform Model for Memory Layout in Dynamic Semantics](http://drops.dagstuhl.de/opus/volltexte/2016/6114/)
+0. https://uridiumauthor.blogspot.com/2018/06/memory-management.html
+0. https://github.com/mtrebi/memory-allocators
+0. http://www.newlisp.org/MemoryManagement.html
+0. http://gee.cs.oswego.edu/dl/html/malloc.html
+0. https://shipilev.net/blog/2014/jmm-pragmatics/
+0. https://floooh.github.io/2018/06/17/handles-vs-pointers.html
+0. https://www.codemag.com/Article/1807051/Introducing-.NET-Core-2.1-Flagship-Types-Span-T-and-Memory-T
+0. https://stefansf.de/post/pointers-are-more-abstract-than-you-might-expect/
+0. [Memory Management Reference](https://www.memorymanagement.org/)
+0. [Pseudomonarchia jemallocum: The false kingdom of jemalloc, or On exploiting the jemalloc memory manager](http://phrack.com/issues/68/10.html#article)
+0. https://gankro.github.io/blah/rust-layouts-and-abis/
+0. https://paul.bone.id.au/2018/10/19/gc-falsehoods/
+0. [Safe Programming with Pointers through Stateful Views](https://www.cs.bu.edu/~hwxi/academic/papers/padl05.pdf)
diff --git a/documentation/bookmark/optimization.md b/documentation/bookmark/optimization.md
index 968fd5e26..3df2cd1ae 100644
--- a/documentation/bookmark/optimization.md
+++ b/documentation/bookmark/optimization.md
@@ -1,69 +1,70 @@
# Inlining
-1. [Defunctionalization](https://en.wikipedia.org/wiki/Defunctionalization)
+0. [Defunctionalization](https://en.wikipedia.org/wiki/Defunctionalization)
# Hashing
-1. [Fibonacci Hashing: The Optimization that the World Forgot (or: a Better Alternative to Integer Modulo)](https://probablydance.com/2018/06/16/fibonacci-hashing-the-optimization-that-the-world-forgot-or-a-better-alternative-to-integer-modulo/)
+0. [Fibonacci Hashing: The Optimization that the World Forgot (or: a Better Alternative to Integer Modulo)](https://probablydance.com/2018/06/16/fibonacci-hashing-the-optimization-that-the-world-forgot-or-a-better-alternative-to-integer-modulo/)
-# Arithmetic
+# Arithmetic | Math
-1. [Labor of Division (Episode I)](https://ridiculousfish.com/blog/posts/labor-of-division-episode-i.html)
+0. [ensmallen: flexible C++ library for efficient numerical optimization](http://ensmallen.org/docs.html)
+0. [Labor of Division (Episode I)](https://ridiculousfish.com/blog/posts/labor-of-division-episode-i.html)
# Compilation
-1. ["Outperforming Imperative with Pure Functional Languages" by Richard Feldman](https://www.youtube.com/watch?v=vzfy4EKwG_Y)
-1. [CompilerGym: Making compiler optimizations accessible to all](https://ai.facebook.com/blog/compilergym-making-compiler-optimizations-accessible-to-all)
-1. [Future Directions for Optimizing Compilers](https://arxiv.org/abs/1809.02161)
+0. ["Outperforming Imperative with Pure Functional Languages" by Richard Feldman](https://www.youtube.com/watch?v=vzfy4EKwG_Y)
+0. [CompilerGym: Making compiler optimizations accessible to all](https://ai.facebook.com/blog/compilergym-making-compiler-optimizations-accessible-to-all)
+0. [Future Directions for Optimizing Compilers](https://arxiv.org/abs/1809.02161)
# Pre-fetching
-1. [Prefetching in Functional Languages](https://www.cl.cam.ac.uk/~tmj32/papers/docs/ainsworth20-ismm.pdf)
+0. [Prefetching in Functional Languages](https://www.cl.cam.ac.uk/~tmj32/papers/docs/ainsworth20-ismm.pdf)
# Partial evaluation
-1. [AnyDSL - A Partial Evaluation Framework for Programming High-Performance Libraries](https://anydsl.github.io/)
+0. [AnyDSL - A Partial Evaluation Framework for Programming High-Performance Libraries](https://anydsl.github.io/)
# For the compiler
-1. [Self Hosting a Million-Lines-Per-Second Parser](https://bjou-lang.org/blog/7-10-2019-self-hosting-a-million-lines-per-second-parser/7-10-2019-self-hosting-a-million-lines-per-second-parser.html)
+0. [Self Hosting a Million-Lines-Per-Second Parser](https://bjou-lang.org/blog/7-10-2019-self-hosting-a-million-lines-per-second-parser/7-10-2019-self-hosting-a-million-lines-per-second-parser.html)
# Reference
-1. [Refterm Lecture Part 1 - Philosophies of Optimization](https://www.youtube.com/watch?v=pgoetgxecw8)
-1. [Optimizations enabled by -ffast-math](https://kristerw.github.io/2021/10/19/fast-math/)
-1. [Simple Code, High Performance](https://www.youtube.com/watch?v=Ge3aKEmZcqY)
-1. [Negotiating with Compilers](https://en.algorithmica.org/hpc/analyzing-performance/compilation/)
-1. [Do Low-level Optimizations Matter?](https://cantrip.org/sortfast.html)
-1. [Inline caching](https://bernsteinbear.com/blog/inline-caching/)
-1. [Weird and Wonderful Division Tricks](https://saml98.github.io/jekyll/update/2020/02/21/weird-division.htmls)
-1. [Towards a Domain-Extensible Compiler: Optimizingan Image Processing Pipeline on Mobile CPUs](https://thok.eu/publications/2021/cgo.pdf)
-1. [Compiler Detection of Function Call Side Effects](https://citeseerx.ist.psu.edu/viewdoc/download;jsessionid=B3D92D05C88C3D9C165785594350C169?doi=10.1.1.70.2096&rep=rep1&type=pdf)
-1. [A Language for Describing Optimization Strategies](https://arxiv.org/abs/2002.02268)
-1. https://docs.google.com/presentation/d/1tpeJZFObkeick4CF-mx0L3CeCgvT15B96aJeRpxEPcE/preview?slide=id.p
-1. https://www.quora.com/What-is-the-future-of-optimizing-compilers?share=1
-1. https://advancedweb.hu/2016/05/27/jvm_jit_optimization_techniques/ &&& https://advancedweb.hu/2016/06/28/jvm_jit_optimization_techniques_part_2/
-1. http://www.scala-native.org/en/latest/blog/interflow.html
-1. https://github.com/roman01la/closure-compiler-handbook
-1. http://hubicka.blogspot.com/2018/06/gcc-8-link-time-and-interprocedural.html
-1. [CppCon 2017: Matt Godbolt “What Has My Compiler Done for Me Lately? Unbolting the Compiler's Lid”](https://www.youtube.com/watch?v=bSkpMdDe4g4)
-1. http://duriansoftware.com/joe/Optimizing-is-multiple-checks-with-modular-arithmetic.html?
-1. https://www.ericsson.com/research-blog/outperforming-state-art-compilers-unison/
-1. http://compileroptimizations.com/index.html
-1. https://polly.llvm.org/
-1. http://paulcavallaro.com/blog/optimizing-function-placement-with-call-chain-clustering/
-1. http://leto.net/docs/C-optimization.php
-1. https://engineering.purdue.edu/~eigenman/ECE663/Handouts/bacon-compiling4hpc.pdf
-1. http://venge.net/graydon/talks/CompilerTalk-2019.pdf
-1. http://www2.imm.dtu.dk/pubdb/views/edoc_download.php/6620/pdf/imm6620.pdf
-1. [Lost in translation: Exposing hidden compiler optimization opportunities](https://arxiv.org/pdf/1903.11397.pdf)
-1. https://kristerw.blogspot.com/2019/04/how-llvm-optimizes-geometric-sums.html
-1. https://nfrechette.github.io/2019/05/08/sign_flip_optimization/
-1. https://grin-tech.github.io/
-1. [Loop Optimizations in LLVM - Michael Kruse](https://www.youtube.com/watch?v=oAPgGYr8T3Y)
-1. [Don’t think, just defunctionalize](https://www.joachim-breitner.de/blog/778-Don%E2%80%99t_think%2C_just_defunctionalize)
+0. [Refterm Lecture Part 1 - Philosophies of Optimization](https://www.youtube.com/watch?v=pgoetgxecw8)
+0. [Optimizations enabled by -ffast-math](https://kristerw.github.io/2021/10/19/fast-math/)
+0. [Simple Code, High Performance](https://www.youtube.com/watch?v=Ge3aKEmZcqY)
+0. [Negotiating with Compilers](https://en.algorithmica.org/hpc/analyzing-performance/compilation/)
+0. [Do Low-level Optimizations Matter?](https://cantrip.org/sortfast.html)
+0. [Inline caching](https://bernsteinbear.com/blog/inline-caching/)
+0. [Weird and Wonderful Division Tricks](https://saml98.github.io/jekyll/update/2020/02/21/weird-division.htmls)
+0. [Towards a Domain-Extensible Compiler: Optimizingan Image Processing Pipeline on Mobile CPUs](https://thok.eu/publications/2021/cgo.pdf)
+0. [Compiler Detection of Function Call Side Effects](https://citeseerx.ist.psu.edu/viewdoc/download;jsessionid=B3D92D05C88C3D9C165785594350C169?doi=10.1.1.70.2096&rep=rep1&type=pdf)
+0. [A Language for Describing Optimization Strategies](https://arxiv.org/abs/2002.02268)
+0. https://docs.google.com/presentation/d/1tpeJZFObkeick4CF-mx0L3CeCgvT15B96aJeRpxEPcE/preview?slide=id.p
+0. https://www.quora.com/What-is-the-future-of-optimizing-compilers?share=1
+0. https://advancedweb.hu/2016/05/27/jvm_jit_optimization_techniques/ &&& https://advancedweb.hu/2016/06/28/jvm_jit_optimization_techniques_part_2/
+0. http://www.scala-native.org/en/latest/blog/interflow.html
+0. https://github.com/roman01la/closure-compiler-handbook
+0. http://hubicka.blogspot.com/2018/06/gcc-8-link-time-and-interprocedural.html
+0. [CppCon 2017: Matt Godbolt “What Has My Compiler Done for Me Lately? Unbolting the Compiler's Lid”](https://www.youtube.com/watch?v=bSkpMdDe4g4)
+0. http://duriansoftware.com/joe/Optimizing-is-multiple-checks-with-modular-arithmetic.html?
+0. https://www.ericsson.com/research-blog/outperforming-state-art-compilers-unison/
+0. http://compileroptimizations.com/index.html
+0. https://polly.llvm.org/
+0. http://paulcavallaro.com/blog/optimizing-function-placement-with-call-chain-clustering/
+0. http://leto.net/docs/C-optimization.php
+0. https://engineering.purdue.edu/~eigenman/ECE663/Handouts/bacon-compiling4hpc.pdf
+0. http://venge.net/graydon/talks/CompilerTalk-2019.pdf
+0. http://www2.imm.dtu.dk/pubdb/views/edoc_download.php/6620/pdf/imm6620.pdf
+0. [Lost in translation: Exposing hidden compiler optimization opportunities](https://arxiv.org/pdf/1903.11397.pdf)
+0. https://kristerw.blogspot.com/2019/04/how-llvm-optimizes-geometric-sums.html
+0. https://nfrechette.github.io/2019/05/08/sign_flip_optimization/
+0. https://grin-tech.github.io/
+0. [Loop Optimizations in LLVM - Michael Kruse](https://www.youtube.com/watch?v=oAPgGYr8T3Y)
+0. [Don’t think, just defunctionalize](https://www.joachim-breitner.de/blog/778-Don%E2%80%99t_think%2C_just_defunctionalize)
# JavaScript
-1. [Javascript Array.push is 945x faster than Array.concat](https://dev.to/uilicious/javascript-array-push-is-945x-faster-than-array-concat-1oki)
+0. [Javascript Array.push is 945x faster than Array.concat](https://dev.to/uilicious/javascript-array-push-is-945x-faster-than-array-concat-1oki)
diff --git a/documentation/bookmark/paradigm/logic_programming.md b/documentation/bookmark/paradigm/logic_programming.md
index 20f6023a9..cf7b7d13c 100644
--- a/documentation/bookmark/paradigm/logic_programming.md
+++ b/documentation/bookmark/paradigm/logic_programming.md
@@ -1,69 +1,70 @@
# Concurrent Logic Programming
-1. [The Joy of Concurrent Logic Programming](http://www.call-with-current-continuation.org/articles/the-joy-of-concurrent-logic-programming.txt)
+0. [The Joy of Concurrent Logic Programming](http://www.call-with-current-continuation.org/articles/the-joy-of-concurrent-logic-programming.txt)
# Unification
-1. [Functors of the World, Unite!](https://www.youtube.com/watch?v=8k7YH9st_8U)
+0. [Functors of the World, Unite!](https://www.youtube.com/watch?v=8k7YH9st_8U)
# Inspiration
-1. [Next-Paradigm Programming Languages: What Will They Look Like and What Changes Will They Bring?](https://arxiv.org/abs/1905.00402)
+0. [Next-Paradigm Programming Languages: What Will They Look Like and What Changes Will They Bring?](https://arxiv.org/abs/1905.00402)
# Reference
-1. https://book.simply-logical.space/
-1. [Higher-Order Logic Programming](https://www.lix.polytechnique.fr/~dale/papers/Handbook_Logic_AI_LP.pdf)
-1. [HiLog: A foundation for higher-order logic programming](http://www.sciencedirect.com/science/article/pii/074310669390039J)
-1. https://www.amazon.com/Reasoned-Schemer-MIT-Press-ebook/dp/B07B9SL4LR
-1. [Can Logic Programming Execute as Fast as Imperative Programming?](https://www2.eecs.berkeley.edu/Pubs/TechRpts/1990/CSD-90-600.pdf)
-1. [Automatic Differentiation using Constraint Handling Rules in Prolog](https://arxiv.org/abs/1706.00231)
-1. [A Framework for Extending microKanren with Constraints](https://arxiv.org/pdf/1701.00633.pdf)
-1. https://www.amazon.com/Clause-Effect-Programming-Working-Programmer/dp/3540629718
-1. https://medium.com/@enkiv2/mycroft-a-predicate-logic-language-overview-post-mortem-e357fe80d53
-1. http://lambda-the-ultimate.org/node/112
-1. http://okmij.org/ftp/papers/LogicT.pdf
-1. https://www.researchgate.net/publication/2274015_Relational_Programming_in_Libra
-1. [Monadic-style backtracking](http://www.cs.ox.ac.uk/ralf.hinze/publications/index.html)
-1. [Prolog's control constructs in a functional setting - Axioms and implementation](http://www.cs.ox.ac.uk/ralf.hinze/publications/index.html)
-1. [Solving Problems Declaratively - Mark Engelberg](https://www.youtube.com/watch?v=TA9DBG8x-ys)
-1. http://programming-puzzler.blogspot.com/2013/03/logic-programming-is-overrated.html
-1. https://gist.github.com/swannodette/3217582
-1. [AppLP: A Dialogue on Applications of Logic Programming](https://arxiv.org/pdf/1704.02375.pdf)
-1. https://www.metalevel.at/prolog
-1. https://www.amazon.com/Reasoned-Schemer-MIT-Press-ebook/dp/B004GEBQS6
-1. https://github.com/Web-Prolog/swi-web-prolog/blob/master/web-client/apps/swish/web-prolog.pdf
-1. [Den of Clojure Build Your Own Logic Engine](https://www.youtube.com/watch?v=y1bVJOAfhKY)
-1. https://eli.thegreenplace.net/2018/unification/
-1. http://boxbase.org/entries/2019/feb/11/dialogical-logic-programming/
-1. [Can logic programming execute as fast as imperative programming?](https://dl.acm.org/citation.cfm?id=128589)
-1. https://synthese.wordpress.com/2010/08/21/prologs-death/
+0. https://book.simply-logical.space/
+0. [Higher-Order Logic Programming](https://www.lix.polytechnique.fr/~dale/papers/Handbook_Logic_AI_LP.pdf)
+0. [HiLog: A foundation for higher-order logic programming](http://www.sciencedirect.com/science/article/pii/074310669390039J)
+0. https://www.amazon.com/Reasoned-Schemer-MIT-Press-ebook/dp/B07B9SL4LR
+0. [Can Logic Programming Execute as Fast as Imperative Programming?](https://www2.eecs.berkeley.edu/Pubs/TechRpts/1990/CSD-90-600.pdf)
+0. [Automatic Differentiation using Constraint Handling Rules in Prolog](https://arxiv.org/abs/1706.00231)
+0. [A Framework for Extending microKanren with Constraints](https://arxiv.org/pdf/1701.00633.pdf)
+0. https://www.amazon.com/Clause-Effect-Programming-Working-Programmer/dp/3540629718
+0. https://medium.com/@enkiv2/mycroft-a-predicate-logic-language-overview-post-mortem-e357fe80d53
+0. http://lambda-the-ultimate.org/node/112
+0. http://okmij.org/ftp/papers/LogicT.pdf
+0. https://www.researchgate.net/publication/2274015_Relational_Programming_in_Libra
+0. [Monadic-style backtracking](http://www.cs.ox.ac.uk/ralf.hinze/publications/index.html)
+0. [Prolog's control constructs in a functional setting - Axioms and implementation](http://www.cs.ox.ac.uk/ralf.hinze/publications/index.html)
+0. [Solving Problems Declaratively - Mark Engelberg](https://www.youtube.com/watch?v=TA9DBG8x-ys)
+0. http://programming-puzzler.blogspot.com/2013/03/logic-programming-is-overrated.html
+0. https://gist.github.com/swannodette/3217582
+0. [AppLP: A Dialogue on Applications of Logic Programming](https://arxiv.org/pdf/1704.02375.pdf)
+0. [The Power of Prolog](https://www.metalevel.at/prolog)
+0. https://www.amazon.com/Reasoned-Schemer-MIT-Press-ebook/dp/B004GEBQS6
+0. https://github.com/Web-Prolog/swi-web-prolog/blob/master/web-client/apps/swish/web-prolog.pdf
+0. [Den of Clojure Build Your Own Logic Engine](https://www.youtube.com/watch?v=y1bVJOAfhKY)
+0. https://eli.thegreenplace.net/2018/unification/
+0. http://boxbase.org/entries/2019/feb/11/dialogical-logic-programming/
+0. [Can logic programming execute as fast as imperative programming?](https://dl.acm.org/citation.cfm?id=128589)
+0. https://synthese.wordpress.com/2010/08/21/prologs-death/
# Language
-1. [Curry: A Truly Integrated Functional Logic Language](https://www-ps.informatik.uni-kiel.de/currywiki/)
-1. https://flix.github.io/
-1. http://logtalk.org/
-1. https://github.com/fnogatz/CHR.js
-1. https://mercurylang.org/
-1. https://www.quora.com/What-are-examples-of-statically-typed-logic-programming-languages-ex-similar-to-Prolog
-1. [Racklog: Prolog-Style Logic Programming](https://plt.eecs.northwestern.edu/snapshots/current/pdf-doc/racklog.pdf)
-1. https://souffle-lang.github.io/
+0. [A Gentle Introduction to MicroKanren](https://erik-j.de/microkanren/)
+0. [Curry: A Truly Integrated Functional Logic Language](https://www-ps.informatik.uni-kiel.de/currywiki/)
+0. https://flix.github.io/
+0. http://logtalk.org/
+0. https://github.com/fnogatz/CHR.js
+0. https://mercurylang.org/
+0. https://www.quora.com/What-are-examples-of-statically-typed-logic-programming-languages-ex-similar-to-Prolog
+0. [Racklog: Prolog-Style Logic Programming](https://plt.eecs.northwestern.edu/snapshots/current/pdf-doc/racklog.pdf)
+0. https://souffle-lang.github.io/
# Beyond logic programming
-1. https://github.com/Web-Prolog/swi-web-prolog
+0. https://github.com/Web-Prolog/swi-web-prolog
# Constraint Logic Programming
-1. http://www.pathwayslms.com/swipltuts/clpfd/clpfd.html
-1. https://stackabuse.com/constraint-programming-with-python-constraint/
+0. http://www.pathwayslms.com/swipltuts/clpfd/clpfd.html
+0. https://stackabuse.com/constraint-programming-with-python-constraint/
# Constraint Handling Rules
-1. http://chrjs.net/
+0. http://chrjs.net/
# Answer Set Programming
-1. [What Is Answer Set Programming?](https://www.cs.utexas.edu/users/vl/papers/wiasp.pdf)
+0. [What Is Answer Set Programming?](https://www.cs.utexas.edu/users/vl/papers/wiasp.pdf)
diff --git a/documentation/bookmark/tool/text_editor.md b/documentation/bookmark/tool/text_editor.md
index f835ab41f..c59667a4b 100644
--- a/documentation/bookmark/tool/text_editor.md
+++ b/documentation/bookmark/tool/text_editor.md
@@ -1,256 +1,257 @@
# Modal editing
-1. [Beyond Vim and Emacs: A Scalable UI Paradigm](https://emacsconf.org/2020/talks/07/)
+0. [Beyond Vim and Emacs: A Scalable UI Paradigm](https://emacsconf.org/2020/talks/07/)
# Code navigation
-1. ["Incremental, zero-config Code Nav using stack graphs" by Douglas Creager](https://www.youtube.com/watch?v=l2R1PTGcwrE)
+0. [Introducing stack graphs](https://github.blog/2021-12-09-introducing-stack-graphs/)
+0. ["Incremental, zero-config Code Nav using stack graphs" by Douglas Creager](https://www.youtube.com/watch?v=l2R1PTGcwrE)
# Rendering
-1. [Text Rendering Hates You](https://gankra.github.io/blah/text-hates-you/)
-1. [Graphics for JVM](https://tonsky.me/blog/skija/)
-1. https://github.com/JetBrains/skija/
-1. https://github.com/JetBrains/skiko/
-1. https://github.com/JetBrains/compose-jb
+0. [Text Rendering Hates You](https://gankra.github.io/blah/text-hates-you/)
+0. [Graphics for JVM](https://tonsky.me/blog/skija/)
+0. https://github.com/JetBrains/skija/
+0. https://github.com/JetBrains/skiko/
+0. https://github.com/JetBrains/compose-jb
# Font
-1. [Google Noto Fonts: Beautiful and free fonts for all languages](https://www.google.com/get/noto/)
+0. [Google Noto Fonts: Beautiful and free fonts for all languages](https://www.google.com/get/noto/)
# Residential programming
-1. [Residential Programming without Mutable State - Thomas Getgood](https://www.youtube.com/watch?v=Kgw9fblSOx4)
+0. [Residential Programming without Mutable State - Thomas Getgood](https://www.youtube.com/watch?v=Kgw9fblSOx4)
# Good Ideas
-1. https://medium.com/@NikitaVoloboev/write-once-never-write-again-c2fa1f6c4e8
-1. [Inline: Efficient Source Code Editing and Manipulation with Code Portals](https://www.youtube.com/watch?v=NQ5h2Ibw6ck)
-1. https://devclass.com/2019/02/15/atlassian-make-jira-invisible-target-developers-ides/
-1. http://lispm.de/genera-concepts
-1. Hovering/selecting an input to a function inside a function-call should display the name of the input in the function declaration. This would help understand the purpose of the value while in the function call without needing Lux/the-language to have named inputs as a feature.
-1. https://www.emacswiki.org/emacs/UndoTree
-1. https://jameshfisher.com/2014/05/11/your-syntax-highlighter-is-wrong/
-1. https://medium.com/@evnbr/coding-in-color-3a6db2743a1e
+0. https://medium.com/@NikitaVoloboev/write-once-never-write-again-c2fa1f6c4e8
+0. [Inline: Efficient Source Code Editing and Manipulation with Code Portals](https://www.youtube.com/watch?v=NQ5h2Ibw6ck)
+0. https://devclass.com/2019/02/15/atlassian-make-jira-invisible-target-developers-ides/
+0. http://lispm.de/genera-concepts
+0. Hovering/selecting an input to a function inside a function-call should display the name of the input in the function declaration. This would help understand the purpose of the value while in the function call without needing Lux/the-language to have named inputs as a feature.
+0. https://www.emacswiki.org/emacs/UndoTree
+0. https://jameshfisher.com/2014/05/11/your-syntax-highlighter-is-wrong/
+0. https://medium.com/@evnbr/coding-in-color-3a6db2743a1e
# Voice
-1. [Speaking in code: how to program by voice](https://www.nature.com/articles/d41586-018-05588-x)
+0. [Speaking in code: how to program by voice](https://www.nature.com/articles/d41586-018-05588-x)
# Refactoring
-1. https://medium.com/zoosk-engineering/refactoring-at-scale-with-abstract-syntax-trees-a3f989ec8524
-1. https://about.sourcegraph.com/
+0. https://medium.com/zoosk-engineering/refactoring-at-scale-with-abstract-syntax-trees-a3f989ec8524
+0. https://about.sourcegraph.com/
# Visual programming
-1. https://github.com/ivanreese/visual-programming-codex
-1. [Lambda Days 2018 - Piotr Moczurad - Visual-textual functional programming with Luna](https://www.youtube.com/watch?v=6xUOuzafmO0)
-1. https://www.luna-lang.org/
-1. https://github.com/hoodiecrow/Tclook
-1. https://blog.sourcerer.io/build-interactive-diagrams-with-storm-react-diagrams-f172ae26af9d
-1. https://www.jointjs.com/opensource
-1. https://github.com/jagenjo/litegraph.js
-1. https://github.com/retejs/rete
-1. http://mikehadlow.blogspot.com/2018/10/visual-programming-why-its-bad-idea.html
-1. https://ncase.me/joy/
-1. https://www.jointjs.com/
-1. [Lambda World 2018 - Diagrammatic Execution Models for Functional Languages - Keynote](https://www.youtube.com/watch?v=sgmpVedCsNM)
-1. http://joshuahhh.com/projects/pane/
-1. [PANE: Programming with visible data](https://www.youtube.com/watch?v=fIEcXAHy6bU)
-1. https://blog.statebox.org/why-visual-programming-doesnt-suck-2c1ece2a414e
-1. https://nodered.org/
+0. https://github.com/ivanreese/visual-programming-codex
+0. [Lambda Days 2018 - Piotr Moczurad - Visual-textual functional programming with Luna](https://www.youtube.com/watch?v=6xUOuzafmO0)
+0. https://www.luna-lang.org/
+0. https://github.com/hoodiecrow/Tclook
+0. https://blog.sourcerer.io/build-interactive-diagrams-with-storm-react-diagrams-f172ae26af9d
+0. https://www.jointjs.com/opensource
+0. https://github.com/jagenjo/litegraph.js
+0. https://github.com/retejs/rete
+0. http://mikehadlow.blogspot.com/2018/10/visual-programming-why-its-bad-idea.html
+0. https://ncase.me/joy/
+0. https://www.jointjs.com/
+0. [Lambda World 2018 - Diagrammatic Execution Models for Functional Languages - Keynote](https://www.youtube.com/watch?v=sgmpVedCsNM)
+0. http://joshuahhh.com/projects/pane/
+0. [PANE: Programming with visible data](https://www.youtube.com/watch?v=fIEcXAHy6bU)
+0. https://blog.statebox.org/why-visual-programming-doesnt-suck-2c1ece2a414e
+0. https://nodered.org/
# Reference
-1. [Deft for Emacs](https://jblevins.org/projects/deft/)
-1. [Text Editing Hates You Too](https://lord.io/text-editing-hates-you-too/)
-1. [Build Your Own Text Editor](https://viewsourcecode.org/snaptoken/kilo/index.html)
-1. [On the design of text editors](https://arxiv.org/abs/2008.06030)
-1. [The Piece Table - the Unsung Hero of Your Text Editor](https://darrenburns.net/posts/piece-table/)
-1. [Build Your Own Text Editor](https://viewsourcecode.org/snaptoken/kilo/)
-1. [It’s 2019. Why don’t we have good code editors?](https://thoughts.thorlaksson.com/2019/09/27/its-2019-why-dont-we-have-good-code-editors/)
-1. [Text Editing Hates You Too](https://lord.io/blog/2019/text-editing-hates-you-too/)
-1. [Why ContentEditable is Terrible](https://medium.engineering/why-contenteditable-is-terrible-122d8a40e480)
-1. [Broot: A better way to navigate directories](https://github.com/Canop/broot)
-1. https://www.simplethread.com/editor-plugins-belong-in-lock-file/
-1. [How to Design an IDE-Friendly Language with Peter Gromov @donnerpeter](https://www.youtube.com/watch?v=lubc8udiP_8)
-1. https://shaunlebron.github.io/parinfer/
-1. https://www.reddit.com/r/emacs/comments/6ztnj9/what_are_the_things_that_you_do_not_like_in_emacs/?st=j7kdafu2&sh=af9ca25d
-1. http://xenodium.com/#emacs-utilities-for-your-os
-1. https://techcrunch.com/2017/02/19/why-is-android-studio-still-such-a-gruesome-embarrassment/
-1. http://emacslife.com/
-1. http://tinyletter.com/Flowsheets/letters/flowsheets-visualizations
-1. http://www.averylaird.com/programming/editor/2017/09/30/the-piece-table/
-1. [Gallery of Programmer Interfaces](https://docs.google.com/presentation/d/1MD-CgzODFWzdpnYXr8bEgysfDmb8PDV6iCAjH5JIvaI/preview?slide=id.g1da0625f1b_0_56)
-1. https://spacevim.org/2017/02/11/use-vim-as-a-java-ide.html
-1. https://github.com/p-e-w/envy
-1. https://enotuniq.org/python_as_a_dsl.html
-1. [Lambda World 2018 - What FP can learn from Smalltalk by Aditya Siram](https://www.youtube.com/watch?v=baxtyeFVn3w)
-1. https://chris-martin.org/2017/loc
+0. [Deft for Emacs](https://jblevins.org/projects/deft/)
+0. [Text Editing Hates You Too](https://lord.io/text-editing-hates-you-too/)
+0. [Build Your Own Text Editor](https://viewsourcecode.org/snaptoken/kilo/index.html)
+0. [On the design of text editors](https://arxiv.org/abs/2008.06030)
+0. [The Piece Table - the Unsung Hero of Your Text Editor](https://darrenburns.net/posts/piece-table/)
+0. [Build Your Own Text Editor](https://viewsourcecode.org/snaptoken/kilo/)
+0. [It’s 2019. Why don’t we have good code editors?](https://thoughts.thorlaksson.com/2019/09/27/its-2019-why-dont-we-have-good-code-editors/)
+0. [Text Editing Hates You Too](https://lord.io/blog/2019/text-editing-hates-you-too/)
+0. [Why ContentEditable is Terrible](https://medium.engineering/why-contenteditable-is-terrible-122d8a40e480)
+0. [Broot: A better way to navigate directories](https://github.com/Canop/broot)
+0. https://www.simplethread.com/editor-plugins-belong-in-lock-file/
+0. [How to Design an IDE-Friendly Language with Peter Gromov @donnerpeter](https://www.youtube.com/watch?v=lubc8udiP_8)
+0. https://shaunlebron.github.io/parinfer/
+0. https://www.reddit.com/r/emacs/comments/6ztnj9/what_are_the_things_that_you_do_not_like_in_emacs/?st=j7kdafu2&sh=af9ca25d
+0. http://xenodium.com/#emacs-utilities-for-your-os
+0. https://techcrunch.com/2017/02/19/why-is-android-studio-still-such-a-gruesome-embarrassment/
+0. http://emacslife.com/
+0. http://tinyletter.com/Flowsheets/letters/flowsheets-visualizations
+0. http://www.averylaird.com/programming/editor/2017/09/30/the-piece-table/
+0. [Gallery of Programmer Interfaces](https://docs.google.com/presentation/d/1MD-CgzODFWzdpnYXr8bEgysfDmb8PDV6iCAjH5JIvaI/preview?slide=id.g1da0625f1b_0_56)
+0. https://spacevim.org/2017/02/11/use-vim-as-a-java-ide.html
+0. https://github.com/p-e-w/envy
+0. https://enotuniq.org/python_as_a_dsl.html
+0. [Lambda World 2018 - What FP can learn from Smalltalk by Aditya Siram](https://www.youtube.com/watch?v=baxtyeFVn3w)
+0. https://chris-martin.org/2017/loc
# Syntax Highlighting
-1. [Syntax highlighting is backwards](https://www.benkuhn.net/syntax)
-1. [Coding in color](https://medium.com/@evnbr/coding-in-color-3a6db2743a1e)
-1. https://code.visualstudio.com/blogs/2017/02/08/syntax-highlighting-optimizations
-1. https://github.com/alecthomas/chroma
-1. https://www.crockford.com/contextcoloring.html
+0. [Syntax highlighting is backwards](https://www.benkuhn.net/syntax)
+0. [Coding in color](https://medium.com/@evnbr/coding-in-color-3a6db2743a1e)
+0. https://code.visualstudio.com/blogs/2017/02/08/syntax-highlighting-optimizations
+0. https://github.com/alecthomas/chroma
+0. https://www.crockford.com/contextcoloring.html
# Music
-1. https://www.hooktheory.com/hookpad/app
+0. https://www.hooktheory.com/hookpad/app
# Data-Structures
-1. [Data Structures for Text Sequences](https://www.cs.unm.edu/~crowley/papers/sds.pdf)
+0. [Data Structures for Text Sequences](https://www.cs.unm.edu/~crowley/papers/sds.pdf)
# Shell
-1. https://masteringemacs.org/article/complete-guide-mastering-eshell
-1. https://medium.com/readcomiccode/behold-z-the-unsung-jewel-that-rethinks-shell-navigation-dae262bb6bdc
-1. https://gitlab.com/emacsomancer/equake
-1. https://github.com/c-bata/go-prompt
+0. https://masteringemacs.org/article/complete-guide-mastering-eshell
+0. https://medium.com/readcomiccode/behold-z-the-unsung-jewel-that-rethinks-shell-navigation-dae262bb6bdc
+0. https://gitlab.com/emacsomancer/equake
+0. https://github.com/c-bata/go-prompt
# Language Server Protocol
-1. https://tomassetti.me/language-server-dot-visual-studio/
-1. https://github.com/Microsoft/language-server-protocol/blob/master/README.md
-1. https://www.ncameron.org/blog/what-the-rls-can-do/
+0. https://tomassetti.me/language-server-dot-visual-studio/
+0. https://github.com/Microsoft/language-server-protocol/blob/master/README.md
+0. https://www.ncameron.org/blog/what-the-rls-can-do/
# Semantic-oriented programming
-1. https://en.wikipedia.org/wiki/Semantic-oriented_programming
-1. https://prezi.com/gp6u1jpgkxej/what-are-soplets/
-1. http://symade.tigris.org/
+0. https://en.wikipedia.org/wiki/Semantic-oriented_programming
+0. https://prezi.com/gp6u1jpgkxej/what-are-soplets/
+0. http://symade.tigris.org/
# Integrated Development Environment (IDE)
-1. [Theia 1.0 - Finally a Good Browser IDE](https://dev.to/svenefftinge/theia-1-0-finally-a-good-browser-ide-3ok0)
-1. https://www.eclipse.org/che/
+0. [Theia 1.0 - Finally a Good Browser IDE](https://dev.to/svenefftinge/theia-1-0-finally-a-good-browser-ide-3ok0)
+0. https://www.eclipse.org/che/
# Advanced AST/source-code manipulation tools
-1. https://caseywatts.com/2018/08/23/codemods.html
-1. https://vimeo.com/189514610
-1. https://github.com/facebook/jscodeshift
-1. http://astexplorer.net/
-1. https://github.com/avajs/ava-codemods
+0. https://caseywatts.com/2018/08/23/codemods.html
+0. https://vimeo.com/189514610
+0. https://github.com/facebook/jscodeshift
+0. http://astexplorer.net/
+0. https://github.com/avajs/ava-codemods
# Extensibility
-1. [The Spoofax Language Workbench](https://metaborg.github.io/spoofax/)
-1. [A Language Independent Task Engine for Incremental Name and Type Analysis](https://www.researchgate.net/publication/290110229_A_Language_Independent_Task_Engine_for_Incremental_Name_and_Type_Analysis)
-1. [Extensible Type-Directed Editing](http://cattheory.com/extensibleTypeDirectedEditing.pdf)
+0. [The Spoofax Language Workbench](https://metaborg.github.io/spoofax/)
+0. [A Language Independent Task Engine for Incremental Name and Type Analysis](https://www.researchgate.net/publication/290110229_A_Language_Independent_Task_Engine_for_Incremental_Name_and_Type_Analysis)
+0. [Extensible Type-Directed Editing](http://cattheory.com/extensibleTypeDirectedEditing.pdf)
# Parsing
-1. [tree-sitter](http://tree-sitter.github.io/tree-sitter/)
-1. [tree-sitter: An incremental parsing system for programming tools](https://github.com/tree-sitter/tree-sitter)
-1. https://blog.github.com/2018-10-31-atoms-new-parsing-system/
-1. ["Tree-sitter - a new parsing system for programming tools" by Max Brunsfeld](https://www.youtube.com/watch?v=Jes3bD6P0To)
+0. [tree-sitter](http://tree-sitter.github.io/tree-sitter/)
+0. [tree-sitter: An incremental parsing system for programming tools](https://github.com/tree-sitter/tree-sitter)
+0. https://blog.github.com/2018-10-31-atoms-new-parsing-system/
+0. ["Tree-sitter - a new parsing system for programming tools" by Max Brunsfeld](https://www.youtube.com/watch?v=Jes3bD6P0To)
# Notebook
-1. https://tiddlywiki.com/
+0. https://tiddlywiki.com/
# Extension
-1. https://github.com/Pext/Pext
+0. https://github.com/Pext/Pext
# Collaborative editing
-1. https://github.com/gsilvamartin/RTCode
-1. https://hackernoon.com/building-conclave-a-decentralized-real-time-collaborative-text-editor-a6ab438fe79f
-1. https://github.com/xi-editor/xi-editor/issues/1187
-1. [Chronofold: a data structure for versioned text](https://arxiv.org/abs/2002.09511)
+0. https://github.com/gsilvamartin/RTCode
+0. https://hackernoon.com/building-conclave-a-decentralized-real-time-collaborative-text-editor-a6ab438fe79f
+0. https://github.com/xi-editor/xi-editor/issues/1187
+0. [Chronofold: a data structure for versioned text](https://arxiv.org/abs/2002.09511)
# Exemplar
## General
-1. https://texteditors.org/cgi-bin/wiki.pl?EditorIndex
-1. [Slate: A completely customizable framework for building rich text editors.](https://github.com/ianstormtaylor/slate)
-1. [Trix: A rich text editor for everyday writing.](https://trix-editor.org/)
-1. [Left](https://100r.co/site/left.html)
-1. https://howl.io/
-1. [The Whole Code Catalog](https://futureofcoding.org/catalog/)
-1. http://substance.io/
-1. https://www.querystorm.com/
-1. http://recursivedrawing.com/
-1. http://doc.cat-v.org/bell_labs/sam_lang_tutorial/sam_tut.pdf
-1. https://github.com/typeintandem/tandem
-1. https://github.com/atom/xray
-1. http://strlen.com/treesheets/
-1. https://sekao.net/nightlight/
-1. http://cirru.org/
-1. http://www.sublimetext.com/
-1. https://atom.io/
-1. http://lighttable.com/
-1. https://www.visualstudio.com/vs/whatsnew/
-1. http://www.prototypingtools.co/
-1. https://nexttexteditor.com/
-1. https://medium.com/cirru-project/stack-editor-programming-by-functions-a961f1d9555c
-1. https://github.com/Cirru/stack-editor
-1. https://kclpure.kcl.ac.uk/portal/files/71018111/Frame_based_editing.pdf
-1. http://reactide.io/
-1. http://jumpfm.org/
-1. https://isomorf.io/#!/
-1. http://granthika.co/
-1. https://portacle.github.io/
-1. https://quokkajs.com/
-1. https://github.com/jaredly/treed
-1. https://github.com/raxod502/el-patch
-1. http://www.jgrasp.org/tutorials200/jGRASP_00_Overview.pdf
-1. http://codiad.com/
-1. https://github.com/sahilm/fuzzy
-1. https://lively-next.org/
-1. http://www.expressionsofchange.org/
-1. https://github.com/onivim/oni
-1. http://wiki.xxiivv.com/ronin
-1. https://github.com/google/xi-editor
-1. https://teletype.atom.io/
-1. https://github.com/martanne/vis
-1. http://www.graspjs.com/
-1. http://kakoune.org/
-1. https://github.com/argimenes/standoff-properties-editor
-1. https://www.conyedit.com/
-1. https://developer.mozilla.org/en-US/docs/Web/API/Document/execCommand
-1. [YOW! Lambda Jam 2018 - Colin Fleming - Developing an IDE for Clojure code](https://www.youtube.com/watch?v=2sPYiGxU4kA)
-1. https://github.com/shaunlebron/history-of-lisp-parens/blob/master/editors.md
-1. https://www.leoeditor.com/
-1. https://storybook.js.org/
-1. https://grapesjs.com/
-1. https://two-wrongs.com/why-you-should-buy-into-the-emacs-platform
-1. https://docs.slatejs.org/
-1. https://github.com/pel-daniel/mind-bicyles
-1. https://github.com/metaseed/metaGo
-1. https://github.com/argimenes/standoff-properties-editor
-1. https://github.com/JeffreyBenjaminBrown/hode
-1. https://tratt.net/laurie/blog/entries/an_editor_for_composed_programs.html
-1. [Hjalfi makes smalltalk (in Javascript)](https://www.youtube.com/watch?v=JDunc6Cr7YQ)
+0. https://texteditors.org/cgi-bin/wiki.pl?EditorIndex
+0. [Slate: A completely customizable framework for building rich text editors.](https://github.com/ianstormtaylor/slate)
+0. [Trix: A rich text editor for everyday writing.](https://trix-editor.org/)
+0. [Left](https://100r.co/site/left.html)
+0. https://howl.io/
+0. [The Whole Code Catalog](https://futureofcoding.org/catalog/)
+0. http://substance.io/
+0. https://www.querystorm.com/
+0. http://recursivedrawing.com/
+0. http://doc.cat-v.org/bell_labs/sam_lang_tutorial/sam_tut.pdf
+0. https://github.com/typeintandem/tandem
+0. https://github.com/atom/xray
+0. http://strlen.com/treesheets/
+0. https://sekao.net/nightlight/
+0. http://cirru.org/
+0. http://www.sublimetext.com/
+0. https://atom.io/
+0. http://lighttable.com/
+0. https://www.visualstudio.com/vs/whatsnew/
+0. http://www.prototypingtools.co/
+0. https://nexttexteditor.com/
+0. https://medium.com/cirru-project/stack-editor-programming-by-functions-a961f1d9555c
+0. https://github.com/Cirru/stack-editor
+0. https://kclpure.kcl.ac.uk/portal/files/71018111/Frame_based_editing.pdf
+0. http://reactide.io/
+0. http://jumpfm.org/
+0. https://isomorf.io/#!/
+0. http://granthika.co/
+0. https://portacle.github.io/
+0. https://quokkajs.com/
+0. https://github.com/jaredly/treed
+0. https://github.com/raxod502/el-patch
+0. http://www.jgrasp.org/tutorials200/jGRASP_00_Overview.pdf
+0. http://codiad.com/
+0. https://github.com/sahilm/fuzzy
+0. https://lively-next.org/
+0. http://www.expressionsofchange.org/
+0. https://github.com/onivim/oni
+0. http://wiki.xxiivv.com/ronin
+0. https://github.com/google/xi-editor
+0. https://teletype.atom.io/
+0. https://github.com/martanne/vis
+0. http://www.graspjs.com/
+0. http://kakoune.org/
+0. https://github.com/argimenes/standoff-properties-editor
+0. https://www.conyedit.com/
+0. https://developer.mozilla.org/en-US/docs/Web/API/Document/execCommand
+0. [YOW! Lambda Jam 2018 - Colin Fleming - Developing an IDE for Clojure code](https://www.youtube.com/watch?v=2sPYiGxU4kA)
+0. https://github.com/shaunlebron/history-of-lisp-parens/blob/master/editors.md
+0. https://www.leoeditor.com/
+0. https://storybook.js.org/
+0. https://grapesjs.com/
+0. https://two-wrongs.com/why-you-should-buy-into-the-emacs-platform
+0. https://docs.slatejs.org/
+0. https://github.com/pel-daniel/mind-bicyles
+0. https://github.com/metaseed/metaGo
+0. https://github.com/argimenes/standoff-properties-editor
+0. https://github.com/JeffreyBenjaminBrown/hode
+0. https://tratt.net/laurie/blog/entries/an_editor_for_composed_programs.html
+0. [Hjalfi makes smalltalk (in Javascript)](https://www.youtube.com/watch?v=JDunc6Cr7YQ)
## Structured editing
-1. [The Animated Guide to Symex](https://countvajhula.com/2021/09/25/the-animated-guide-to-symex/)
-1. [Leo](https://www.leoeditor.com/)
-1. [Inspiring a future Clojure editor with forgotten Lisp UX - Shaun Lebron](https://www.youtube.com/watch?v=K0Tsa3smr1w)
-1. [Dion Systems - The How And Why Of Reinventing The Wheel](https://vimeo.com/485177664)
-1. [Towards Tactic Metaprogramming in Haskell](https://reasonablypolymorphic.com/blog/towards-tactics/index.html)
-1. https://github.com/Raathigesh/waypoint
-1. [Going beyond regular expressions with structural code search](https://about.sourcegraph.com/blog/going-beyond-regular-expressions-with-structural-code-search)
-1. [俺のlisp](https://github.com/illiichi/orenolisp)
-1. [豆腐 (Tofu): meaningful code editing](https://gregoor.github.io/tofu/)
-1. [Tiled Text](http://www.tiledtext.com/projects/tiledtext)
-1. [Deuce: A Lightweight User Interface for Structured Editing](https://arxiv.org/abs/1707.00015)
-1. ["Structured Editing for Elm* in Elm" by Ravi Chugh](https://www.youtube.com/watch?v=-TFL6E1uSHE)
-1. [The TeXmacs user interface and structured text editing](https://www.youtube.com/watch?v=Sc55nOSN0kQ)
+0. [The Animated Guide to Symex](https://countvajhula.com/2021/09/25/the-animated-guide-to-symex/)
+0. [Leo](https://www.leoeditor.com/)
+0. [Inspiring a future Clojure editor with forgotten Lisp UX - Shaun Lebron](https://www.youtube.com/watch?v=K0Tsa3smr1w)
+0. [Dion Systems - The How And Why Of Reinventing The Wheel](https://vimeo.com/485177664)
+0. [Towards Tactic Metaprogramming in Haskell](https://reasonablypolymorphic.com/blog/towards-tactics/index.html)
+0. https://github.com/Raathigesh/waypoint
+0. [Going beyond regular expressions with structural code search](https://about.sourcegraph.com/blog/going-beyond-regular-expressions-with-structural-code-search)
+0. [俺のlisp](https://github.com/illiichi/orenolisp)
+0. [豆腐 (Tofu): meaningful code editing](https://gregoor.github.io/tofu/)
+0. [Tiled Text](http://www.tiledtext.com/projects/tiledtext)
+0. [Deuce: A Lightweight User Interface for Structured Editing](https://arxiv.org/abs/1707.00015)
+0. ["Structured Editing for Elm* in Elm" by Ravi Chugh](https://www.youtube.com/watch?v=-TFL6E1uSHE)
+0. [The TeXmacs user interface and structured text editing](https://www.youtube.com/watch?v=Sc55nOSN0kQ)
## Tree editor
-1. http://justinpombrio.net/tree-editors/survey.html
+0. http://justinpombrio.net/tree-editors/survey.html
## Image editor
-1. https://www.ludigraphix.org/
+0. https://www.ludigraphix.org/
diff --git a/documentation/bookmark/type_theory/linear.md b/documentation/bookmark/type_theory/linear.md
deleted file mode 100644
index 00f70e422..000000000
--- a/documentation/bookmark/type_theory/linear.md
+++ /dev/null
@@ -1,4 +0,0 @@
-# Reference
-
-1. [Chu construction on linear logic](http://boxbase.org/entries/2019/jul/15/chu-construction/)
-
diff --git a/documentation/bookmark/type_theory/sub_structural.md b/documentation/bookmark/type_theory/sub_structural.md
new file mode 100644
index 000000000..7b87df049
--- /dev/null
+++ b/documentation/bookmark/type_theory/sub_structural.md
@@ -0,0 +1,6 @@
+# Reference
+
+0. [Linear Types Can Help](http://aidancully.blogspot.com/2021/12/linear-types-can-help.html)
+0. [Less Painful Linear Types](http://aidancully.blogspot.com/2021/12/less-painful-linear-types.html)
+0. [Chu construction on linear logic](http://boxbase.org/entries/2019/jul/15/chu-construction/)
+
diff --git a/documentation/bookmark/user_interface/accessibility.md b/documentation/bookmark/user_interface/accessibility.md
index 6519470b3..d4f38e0c1 100644
--- a/documentation/bookmark/user_interface/accessibility.md
+++ b/documentation/bookmark/user_interface/accessibility.md
@@ -1,5 +1,6 @@
# Reference
-1. [Detecting Hover-Capable Devices](https://css-irl.info/detecting-hover-capable-devices/)
-1. [Nobody talks about the real reason to use Tabs over Spaces](https://www.reddit.com/r/javascript/comments/c8drjo/nobody_talks_about_the_real_reason_to_use_tabs/?st=jxuy98ok&sh=8487bdfa)
+0. [Making Accessibility More Accessible](https://austingil.com/making-accessibility-more-accessible/)
+0. [Detecting Hover-Capable Devices](https://css-irl.info/detecting-hover-capable-devices/)
+0. [Nobody talks about the real reason to use Tabs over Spaces](https://www.reddit.com/r/javascript/comments/c8drjo/nobody_talks_about_the_real_reason_to_use_tabs/?st=jxuy98ok&sh=8487bdfa)
diff --git a/documentation/bookmark/user_interface/desktop.md b/documentation/bookmark/user_interface/desktop.md
index deb487c93..caeac6251 100644
--- a/documentation/bookmark/user_interface/desktop.md
+++ b/documentation/bookmark/user_interface/desktop.md
@@ -1,4 +1,8 @@
+# Qt
+
+0. [NodeGui](https://docs.nodegui.org/)
+
# Browser-based
-1. [muon](https://github.com/ImVexed/muon)
+0. [muon](https://github.com/ImVexed/muon)
diff --git a/documentation/bookmark/user_interface/widget.md b/documentation/bookmark/user_interface/widget.md
new file mode 100644
index 000000000..20f6a1a81
--- /dev/null
+++ b/documentation/bookmark/user_interface/widget.md
@@ -0,0 +1,4 @@
+# Reference
+
+1. [Floating UI](https://www.floating-ui.com/)
+
diff --git a/documentation/bookmark/web_browser.md b/documentation/bookmark/web_browser.md
index cc698019a..7c12f5de2 100644
--- a/documentation/bookmark/web_browser.md
+++ b/documentation/bookmark/web_browser.md
@@ -1,5 +1,6 @@
# Exemplar
+1. [Nyxt](https://nyxt.atlas.engineer/)
1. [Stack](https://stackbrowser.com/)
1. [Flow: The super fast, multithreaded HTML5 browser from Ekioh](https://www.ekioh.com/flow-browser/)
1. https://refresh.study/
@@ -36,6 +37,7 @@
# Reference
+1. [Emacs with Nyxt: extend your editor with the power of a Lisp browser](https://nyxt.atlas.engineer/article/emacs-conf.org)
1. [Web Browser Engineering](https://browser.engineering/)
1. [Public Suffix List](https://publicsuffix.org/)
1. [Public Suffix List Problems](https://github.com/sleevi/psl-problems)
diff --git a/lux-jvm/commands.md b/lux-jvm/commands.md
index cf4e13b01..a4644f915 100644
--- a/lux-jvm/commands.md
+++ b/lux-jvm/commands.md
@@ -40,14 +40,14 @@ cd ~/lux/stdlib/ \
```
cd ~/lux/lux-jvm/ \
-&& mvn install:install-file -Dfile=target/program.jar -DgroupId=com.github.luxlang -DartifactId=lux-jvm -Dversion=0.6.5 -Dpackaging=jar
+&& mvn install:install-file -Dfile=target/program.jar -DgroupId=com.github.luxlang -DartifactId=lux-jvm -Dversion=0.7.0 -Dpackaging=jar
cd ~/lux/lux-jvm/ && mvn deploy:deploy-file \
-Durl=https://USERNAME:PASSWORD@oss.sonatype.org/content/repositories/snapshots/ \
-Dfile=target/program.jar \
-DgroupId=com.github.luxlang \
-DartifactId=lux-jvm \
--Dversion=0.6.1-SNAPSHOT \
+-Dversion=0.7.0-SNAPSHOT \
-Dpackaging=jar
```
diff --git a/lux-jvm/source/luxc/lang/translation/jvm/extension/host.lux b/lux-jvm/source/luxc/lang/translation/jvm/extension/host.lux
index ee4096fe1..45bbce9f9 100644
--- a/lux-jvm/source/luxc/lang/translation/jvm/extension/host.lux
+++ b/lux-jvm/source/luxc/lang/translation/jvm/extension/host.lux
@@ -1104,77 +1104,76 @@
.let [all_dependencies (dependency.all ($_ list#composite
all_input_dependencies
all_closure_dependencies
- all_method_dependencies))]]
- (do [! phase.monad]
- [[context _] (generation.with_new_context
- archive
- all_dependencies
- (in []))
- .let [[module_id artifact_id] context
- anonymous_class_name (///.class_name context)
- class (type.class anonymous_class_name (list))
- total_environment (|> overriden_methods
- ... Get all the environments.
- (list#each product.left)
- ... Combine them.
- list#conjoint
- ... Remove duplicates.
- (set.of_list synthesis.hash)
- set.list)
- global_mapping (|> total_environment
- ... Give them names as "foreign" variables.
- list.enumeration
- (list#each (function (_ [id capture])
- [capture {variable.#Foreign id}]))
- (dictionary.of_list synthesis.hash))
- normalized_methods (list#each (function (_ [environment
- [ownerT name
- strict_fp? annotations vars
- self_name arguments returnT exceptionsT
- body]])
- (let [local_mapping (|> environment
- list.enumeration
- (list#each (function (_ [foreign_id capture])
- [(synthesis.variable/foreign foreign_id)
- (|> global_mapping
- (dictionary.value capture)
- maybe.trusted)]))
- (dictionary.of_list synthesis.hash))]
- [ownerT name
- strict_fp? annotations vars
- self_name arguments returnT exceptionsT
- (normalize_method_body local_mapping body)]))
- overriden_methods)]
- inputsTI (monad.each ! (generate_input generate archive) inputsTS)
- method_definitions (|> normalized_methods
- (monad.each ! (function (_ [ownerT name
- strict_fp? annotations varsT
- self_name arguments returnT exceptionsT
- bodyS])
- (do !
- [bodyG (generation.with_context artifact_id
- (generate archive bodyS))
- .let [argumentsT (list#each product.right arguments)]]
- (in (_def.method {$.#Public}
- (if strict_fp?
- ($_ $.++M $.finalM $.strictM)
- $.finalM)
- name
- (type.method [varsT argumentsT returnT exceptionsT])
- (|>> (prepare_arguments 1 argumentsT)
- bodyG
- (returnI returnT)))))))
- (# ! each _def.fuse))
- .let [directive [anonymous_class_name
- (_def.class {$.#V1_6} {$.#Public} $.finalC
- anonymous_class_name (list)
- super_class super_interfaces
- (|>> (///function.with_environment total_environment)
- (..with_anonymous_init class total_environment super_class inputsTI)
- method_definitions))]]
- _ (generation.execute! directive)
- _ (generation.save! artifact_id {.#None} directive)]
- (..anonymous_instance generate archive class total_environment))))]))
+ all_method_dependencies))]
+ [context _] (generation.with_new_context
+ archive
+ all_dependencies
+ (in []))
+ .let [[module_id artifact_id] context
+ anonymous_class_name (///.class_name context)
+ class (type.class anonymous_class_name (list))
+ total_environment (|> overriden_methods
+ ... Get all the environments.
+ (list#each product.left)
+ ... Combine them.
+ list#conjoint
+ ... Remove duplicates.
+ (set.of_list synthesis.hash)
+ set.list)
+ global_mapping (|> total_environment
+ ... Give them names as "foreign" variables.
+ list.enumeration
+ (list#each (function (_ [id capture])
+ [capture {variable.#Foreign id}]))
+ (dictionary.of_list synthesis.hash))
+ normalized_methods (list#each (function (_ [environment
+ [ownerT name
+ strict_fp? annotations vars
+ self_name arguments returnT exceptionsT
+ body]])
+ (let [local_mapping (|> environment
+ list.enumeration
+ (list#each (function (_ [foreign_id capture])
+ [(synthesis.variable/foreign foreign_id)
+ (|> global_mapping
+ (dictionary.value capture)
+ maybe.trusted)]))
+ (dictionary.of_list synthesis.hash))]
+ [ownerT name
+ strict_fp? annotations vars
+ self_name arguments returnT exceptionsT
+ (normalize_method_body local_mapping body)]))
+ overriden_methods)]
+ inputsTI (monad.each ! (generate_input generate archive) inputsTS)
+ method_definitions (|> normalized_methods
+ (monad.each ! (function (_ [ownerT name
+ strict_fp? annotations varsT
+ self_name arguments returnT exceptionsT
+ bodyS])
+ (do !
+ [bodyG (generation.with_context artifact_id
+ (generate archive bodyS))
+ .let [argumentsT (list#each product.right arguments)]]
+ (in (_def.method {$.#Public}
+ (if strict_fp?
+ ($_ $.++M $.finalM $.strictM)
+ $.finalM)
+ name
+ (type.method [varsT argumentsT returnT exceptionsT])
+ (|>> (prepare_arguments 1 argumentsT)
+ bodyG
+ (returnI returnT)))))))
+ (# ! each _def.fuse))
+ .let [directive [anonymous_class_name
+ (_def.class {$.#V1_6} {$.#Public} $.finalC
+ anonymous_class_name (list)
+ super_class super_interfaces
+ (|>> (///function.with_environment total_environment)
+ (..with_anonymous_init class total_environment super_class inputsTI)
+ method_definitions))]]
+ _ (generation.execute! directive)
+ _ (generation.save! artifact_id {.#None} directive)]
+ (..anonymous_instance generate archive class total_environment)))]))
(def: class_bundle
Bundle
diff --git a/stdlib/source/library/lux/control/concurrency/frp.lux b/stdlib/source/library/lux/control/concurrency/frp.lux
index f423a0ccd..c366207f9 100644
--- a/stdlib/source/library/lux/control/concurrency/frp.lux
+++ b/stdlib/source/library/lux/control/concurrency/frp.lux
@@ -1,21 +1,21 @@
(.using
- [library
- [lux {"-" list}
- [abstract
- [equivalence {"+" Equivalence}]
- [functor {"+" Functor}]
- [apply {"+" Apply}]
- ["[0]" monad {"+" Monad do}]]
- [control
- ["[0]" maybe ("[1]#[0]" functor)]
- ["[0]" try {"+" Try}]
- ["[0]" exception {"+" exception:}]
- ["[0]" io {"+" IO io}]]
- [type {"+" :sharing}
- abstract]]]
- [//
- ["[0]" atom {"+" Atom}]
- ["[0]" async {"+" Async} ("[1]#[0]" functor)]])
+ [library
+ [lux {"-" list}
+ [abstract
+ [equivalence {"+" Equivalence}]
+ [functor {"+" Functor}]
+ [apply {"+" Apply}]
+ ["[0]" monad {"+" Monad do}]]
+ [control
+ ["[0]" maybe ("[1]#[0]" functor)]
+ ["[0]" try {"+" Try}]
+ ["[0]" exception {"+" exception:}]
+ ["[0]" io {"+" IO io}]]
+ [type {"+" :sharing}
+ abstract]]]
+ [//
+ ["[0]" atom {"+" Atom}]
+ ["[0]" async {"+" Async} ("[1]#[0]" monad)]])
(type: .public (Channel a)
(Async (Maybe [a (Channel a)])))
@@ -209,16 +209,19 @@
(All (_ a b)
(-> (-> b a (Async a)) a (Channel b)
(Channel a)))
- (do [! async.monad]
- [item channel]
- (case item
- {.#None}
- (in {.#Some [init (in {.#None})]})
-
- {.#Some [head tail]}
- (do !
- [init' (f head init)]
- (in {.#Some [init (mixes f init' tail)]})))))
+ (<| async#in
+ {.#Some}
+ [init]
+ (do [! async.monad]
+ [item channel]
+ (case item
+ {.#None}
+ (in {.#None})
+
+ {.#Some [head tail]}
+ (do !
+ [init' (f head init)]
+ (mixes f init' tail))))))
(def: .public (poll milli_seconds action)
(All (_ a)
diff --git a/stdlib/source/library/lux/data/collection/array.lux b/stdlib/source/library/lux/data/collection/array.lux
index d78e5ba58..ea16cddfc 100644
--- a/stdlib/source/library/lux/data/collection/array.lux
+++ b/stdlib/source/library/lux/data/collection/array.lux
@@ -1,22 +1,22 @@
(.using
- [library
- [lux {"-" list}
- ["@" target]
- [abstract
- [monoid {"+" Monoid}]
- [functor {"+" Functor}]
- [equivalence {"+" Equivalence}]
- [mix {"+" Mix}]
- [predicate {"+" Predicate}]]
- [control
- ["[0]" maybe]]
- [data
- ["[0]" product]
- [collection
- ["[0]" list ("[1]#[0]" mix)]]]
- [math
- [number
- ["n" nat]]]]])
+ [library
+ [lux {"-" list}
+ ["@" target]
+ [abstract
+ [monoid {"+" Monoid}]
+ [functor {"+" Functor}]
+ [equivalence {"+" Equivalence}]
+ [mix {"+" Mix}]
+ [predicate {"+" Predicate}]]
+ [control
+ ["[0]" maybe]]
+ [data
+ ["[0]" product]
+ [collection
+ ["[0]" list ("[1]#[0]" mix)]]]
+ [math
+ [number
+ ["n" nat]]]]])
(def: .public type_name
"#Array")
@@ -401,3 +401,23 @@
[every? true and]
[any? false or]
)
+
+(def: .public (one check items)
+ (All (_ a b)
+ (-> (-> a (Maybe b)) (Array a) (Maybe b)))
+ (let [size (..size items)]
+ (loop [idx 0]
+ (if (n.< size idx)
+ (with_expansions [<again> (again (++ idx))]
+ (case (..read! idx items)
+ {.#Some input}
+ (case (check input)
+ {.#None}
+ <again>
+
+ output
+ output)
+
+ {.#None}
+ <again>))
+ {.#None}))))
diff --git a/stdlib/source/library/lux/data/collection/list.lux b/stdlib/source/library/lux/data/collection/list.lux
index 37e944bb8..28f4d3db7 100644
--- a/stdlib/source/library/lux/data/collection/list.lux
+++ b/stdlib/source/library/lux/data/collection/list.lux
@@ -1,23 +1,23 @@
(.using
- [library
- [lux "*"
- ["@" target]
- [abstract
- [monoid {"+" Monoid}]
- [apply {"+" Apply}]
- [equivalence {"+" Equivalence}]
- [hash {"+" Hash}]
- [mix {"+" Mix}]
- [predicate {"+" Predicate}]
- ["[0]" functor {"+" Functor}]
- ["[0]" monad {"+" Monad do}]
- ["[0]" enum]]
- [data
- ["[0]" bit]
- ["[0]" product]]
- [math
- [number
- ["n" nat]]]]])
+ [library
+ [lux "*"
+ ["@" target]
+ [abstract
+ [monoid {"+" Monoid}]
+ [apply {"+" Apply}]
+ [equivalence {"+" Equivalence}]
+ [hash {"+" Hash}]
+ [mix {"+" Mix}]
+ [predicate {"+" Predicate}]
+ ["[0]" functor {"+" Functor}]
+ ["[0]" monad {"+" Monad do}]
+ ["[0]" enum]]
+ [data
+ ["[0]" bit]
+ ["[0]" product]]
+ [math
+ [number
+ ["n" nat]]]]])
... (type: (List a)
... #End
@@ -613,3 +613,14 @@
_
{.#Left "Wrong syntax for when"}))
+
+(def: .public (revised item revision it)
+ (All (_ a) (-> Nat (-> a a) (List a) (List a)))
+ (case it
+ {.#End}
+ {.#End}
+
+ {.#Item head tail}
+ (case item
+ 0 {.#Item (revision head) tail}
+ _ (revised (-- item) revision it))))
diff --git a/stdlib/source/library/lux/data/collection/sequence.lux b/stdlib/source/library/lux/data/collection/sequence.lux
index 4a2beb94f..07ebeba76 100644
--- a/stdlib/source/library/lux/data/collection/sequence.lux
+++ b/stdlib/source/library/lux/data/collection/sequence.lux
@@ -2,35 +2,35 @@
... https://hypirion.com/musings/understanding-persistent-vector-pt-2
... https://hypirion.com/musings/understanding-persistent-vector-pt-3
(.using
- [library
- [lux {"-" list}
- ["@" target]
- [abstract
- [functor {"+" Functor}]
- [apply {"+" Apply}]
- [monad {"+" Monad do}]
- [equivalence {"+" Equivalence}]
- [monoid {"+" Monoid}]
- [mix {"+" Mix}]
- [predicate {"+" Predicate}]]
- [control
- ["[0]" maybe]
- ["[0]" try {"+" Try}]
- ["[0]" exception {"+" exception:}]
- ["<>" parser
- ["<[0]>" code {"+" Parser}]]]
- [data
- ["[0]" product]
- [collection
- ["[0]" list ("[1]#[0]" mix functor monoid)]
- ["[0]" array {"+" Array} ("[1]#[0]" functor mix)]]]
- [macro
- [syntax {"+" syntax:}]
- ["[0]" code]]
- [math
- [number
- ["n" nat]
- ["[0]" i64]]]]])
+ [library
+ [lux {"-" list}
+ ["@" target]
+ [abstract
+ [functor {"+" Functor}]
+ [apply {"+" Apply}]
+ [monad {"+" Monad do}]
+ [equivalence {"+" Equivalence}]
+ [monoid {"+" Monoid}]
+ [mix {"+" Mix}]
+ [predicate {"+" Predicate}]]
+ [control
+ ["[0]" maybe]
+ ["[0]" try {"+" Try}]
+ ["[0]" exception {"+" exception:}]
+ ["<>" parser
+ ["<[0]>" code {"+" Parser}]]]
+ [data
+ ["[0]" product]
+ [collection
+ ["[0]" list ("[1]#[0]" mix functor monoid)]
+ ["[0]" array {"+" Array} ("[1]#[0]" functor mix)]]]
+ [macro
+ [syntax {"+" syntax:}]
+ ["[0]" code]]
+ [math
+ [number
+ ["n" nat]
+ ["[0]" i64]]]]])
(type: (Node a)
(Variant
@@ -300,11 +300,11 @@
sequence))}
(exception.except ..index_out_of_bounds [sequence idx]))))
-(def: .public (revised idx f sequence)
+(def: .public (revised idx revision it)
(All (_ a) (-> Nat (-> a a) (Sequence a) (Try (Sequence a))))
(do try.monad
- [val (..item idx sequence)]
- (..has idx (f val) sequence)))
+ [val (..item idx it)]
+ (..has idx (revision val) it)))
(def: .public (prefix sequence)
(All (_ a) (-> (Sequence a) (Sequence a)))
@@ -498,3 +498,36 @@
[every? array.every? #1 and]
[any? array.any? #0 or]
)
+
+(def: .public (only when items)
+ (All (_ a) (-> (-> a Bit) (Sequence a) (Sequence a)))
+ (..mix (function (_ item output)
+ (if (when item)
+ (..suffix item output)
+ output))
+ ..empty
+ items))
+
+(def: (one|node check items)
+ (All (_ a b)
+ (-> (-> a (Maybe b)) (Node a) (Maybe b)))
+ (case items
+ {#Base items}
+ (array.one check items)
+
+ {#Hierarchy items}
+ (array.one (one|node check) items)))
+
+(def: .public (one check items)
+ (All (_ a b)
+ (-> (-> a (Maybe b)) (Sequence a) (Maybe b)))
+ (case (|> items
+ (value@ #root)
+ (array.one (one|node check)))
+ {.#None}
+ (|> items
+ (value@ #tail)
+ (array.one check))
+
+ output
+ output))
diff --git a/stdlib/source/library/lux/data/color/named.lux b/stdlib/source/library/lux/data/color/named.lux
index d5de847d4..c25c5fb16 100644
--- a/stdlib/source/library/lux/data/color/named.lux
+++ b/stdlib/source/library/lux/data/color/named.lux
@@ -5,6 +5,7 @@
[number {"+" hex}]]]]
["[0]" // {"+" Color}])
+... https://developer.mozilla.org/en-US/docs/Web/CSS/color_value
(template [<red> <green> <blue> <name>]
[(`` (def: .public <name>
Color
diff --git a/stdlib/source/library/lux/data/format/css/class.lux b/stdlib/source/library/lux/data/format/css/class.lux
new file mode 100644
index 000000000..e3b1a67b7
--- /dev/null
+++ b/stdlib/source/library/lux/data/format/css/class.lux
@@ -0,0 +1,33 @@
+(.using
+ [library
+ [lux "*"
+ ["[0]" meta]
+ [abstract
+ [monad {"+" do}]]
+ [data
+ ["[0]" text ("[1]#[0]" hash)
+ ["%" format {"+" format}]]]
+ [macro
+ [syntax {"+" syntax:}]
+ ["[0]" code]]
+ [type
+ abstract]]])
+
+(abstract: .public Class
+ Text
+
+ (def: .public class
+ (-> Class Text)
+ (|>> :representation))
+
+ (def: .public custom
+ (-> Text Class)
+ (|>> :abstraction))
+
+ (syntax: .public (generic [])
+ (do meta.monad
+ [module meta.current_module_name
+ class meta.seed]
+ (in (list (` (..custom (~ (code.text (format "c" (%.nat/16 class)
+ "_" (%.nat/16 (text#hash module)))))))))))
+ )
diff --git a/stdlib/source/library/lux/data/format/css/id.lux b/stdlib/source/library/lux/data/format/css/id.lux
new file mode 100644
index 000000000..c5a6f5862
--- /dev/null
+++ b/stdlib/source/library/lux/data/format/css/id.lux
@@ -0,0 +1,33 @@
+(.using
+ [library
+ [lux "*"
+ ["[0]" meta]
+ [abstract
+ [monad {"+" do}]]
+ [data
+ ["[0]" text ("[1]#[0]" hash)
+ ["%" format {"+" format}]]]
+ [macro
+ [syntax {"+" syntax:}]
+ ["[0]" code]]
+ [type
+ abstract]]])
+
+(abstract: .public ID
+ Text
+
+ (def: .public id
+ (-> ID Text)
+ (|>> :representation))
+
+ (def: .public custom
+ (-> Text ID)
+ (|>> :abstraction))
+
+ (syntax: .public (generic [])
+ (do meta.monad
+ [module meta.current_module_name
+ id meta.seed]
+ (in (list (` (..custom (~ (code.text (format "i" (%.nat/16 id)
+ "_" (%.nat/16 (text#hash module)))))))))))
+ )
diff --git a/stdlib/source/library/lux/data/format/css/selector.lux b/stdlib/source/library/lux/data/format/css/selector.lux
index 35893766a..d19cbd9bb 100644
--- a/stdlib/source/library/lux/data/format/css/selector.lux
+++ b/stdlib/source/library/lux/data/format/css/selector.lux
@@ -1,23 +1,24 @@
(.using
- [library
- [lux {"-" Label or and for same? not}
- ["[0]" locale {"+" Locale}]
- [data
- ["[0]" text
- ["%" format {"+" format}]]]
- [math
- [number
- ["i" int]]]
- [type
- abstract]
- [macro
- ["[0]" template]]]])
+ [library
+ [lux {"-" Label or and for same? not}
+ ["[0]" locale {"+" Locale}]
+ [data
+ ["[0]" text
+ ["%" format {"+" format}]]]
+ [math
+ [number
+ ["i" int]]]
+ [type
+ abstract]
+ [macro
+ ["[0]" template]]]]
+ ["[0]" // "_"
+ ["[1][0]" id {"+" ID}]
+ ["[1][0]" class {"+" Class}]])
(type: .public Label Text)
(type: .public Tag Label)
-(type: .public ID Label)
-(type: .public Class Label)
(type: .public Attribute Label)
(abstract: .public (Generic brand) Any)
@@ -49,13 +50,13 @@
(-> Tag (Selector Cannot_Chain))
(|>> :abstraction))
- (template [<name> <type> <prefix> <kind>]
+ (template [<name> <type> <prefix> <kind> <out>]
[(def: .public <name>
(-> <type> (Selector <kind>))
- (|>> (format <prefix>) :abstraction))]
+ (|>> <out> (format <prefix>) :abstraction))]
- [id ID "#" Unique]
- [class Class "." Can_Chain]
+ [id ID "#" Unique //id.id]
+ [class Class "." Can_Chain //class.class]
)
(template [<right> <left> <combinator>+]
diff --git a/stdlib/source/library/lux/data/format/html.lux b/stdlib/source/library/lux/data/format/html.lux
index 79c3243c9..b6021695d 100644
--- a/stdlib/source/library/lux/data/format/html.lux
+++ b/stdlib/source/library/lux/data/format/html.lux
@@ -1,28 +1,28 @@
(.using
- [library
- [lux {"-" Meta Source comment and}
- [control
- ["[0]" function]
- ["[0]" maybe ("[1]#[0]" functor)]]
- [data
- ["[0]" product]
- ["[0]" text
- ["%" format {"+" format}]]
- [collection
- ["[0]" list ("[1]#[0]" functor mix)]]]
- [type
- abstract]
- [host
- ["[0]" js]]
- [macro
- ["[0]" template]]
- [world
- [net {"+" URL}]]]]
- [//
- [css
- ["[0]" selector]
- ["[0]" style {"+" Style}]]
- ["[0]" xml {"+" XML}]])
+ [library
+ [lux {"-" Meta Source comment and template}
+ [control
+ ["[0]" function]
+ ["[0]" maybe ("[1]#[0]" functor)]]
+ [data
+ ["[0]" product]
+ ["[0]" text
+ ["%" format {"+" Format format}]]
+ [collection
+ ["[0]" list ("[1]#[0]" functor mix)]]]
+ [macro
+ ["[0]" template]]
+ [target
+ ["[0]" js]]
+ [type
+ abstract]
+ [world
+ [net {"+" URL}]]]]
+ [//
+ ["[0]" xml {"+" XML}]
+ [css
+ ["[0]" selector]
+ ["[0]" style {"+" Style}]]])
(type: .public Tag selector.Tag)
(type: .public ID selector.ID)
@@ -37,19 +37,19 @@
(type: .public Target
(Variant
- #Blank
- #Parent
- #Self
- #Top
+ {#Blank}
+ {#Parent}
+ {#Self}
+ {#Top}
{#Frame Text}))
(def: (target value)
(-> Target Text)
(case value
- #Blank "_blank"
- #Parent "_parent"
- #Self "_self"
- #Top "_top"
+ {#Blank} "_blank"
+ {#Parent} "_parent"
+ {#Self} "_self"
+ {#Top} "_top"
{#Frame name} name))
... Properly formats text to ensure no injection can happen on the HTML.
@@ -65,14 +65,14 @@
(def: attributes
(-> Attributes Text)
(|>> (list#each (function (_ [key val])
- (format key "=" text.double_quote (..safe val) text.double_quote)))
- (text.interposed " ")))
+ (format " " key "=" text.double_quote (..safe val) text.double_quote)))
+ text.together))
(def: (open tag attributes)
(-> Tag Attributes Text)
(|> attributes
..attributes
- (format tag " ")
+ (format tag)
(text.enclosed ["<" ">"])))
(def: close
@@ -82,7 +82,7 @@
(abstract: .public (HTML brand)
Text
- (template [<name> <brand>]
+ (.template [<name> <brand>]
[(abstract: <brand> Any)
(type: .public <name> (HTML <brand>))]
@@ -100,11 +100,11 @@
[Document Document']
)
- (template [<super> <super_raw> <sub>+]
+ (.template [<super> <super_raw> <sub>+]
[(abstract: (<super_raw> brand) Any)
(type: .public <super> (HTML (<super_raw> Any)))
- (`` (template [<sub> <sub_raw>]
+ (`` (.template [<sub> <sub_raw>]
[(abstract: <sub_raw> Any)
(type: .public <sub> (HTML (<super_raw> <sub_raw>)))]
@@ -159,7 +159,7 @@
content
(..close tag))))
- (template [<name> <tag> <brand>]
+ (.template [<name> <tag> <brand>]
[(def: .public <name>
(-> Attributes <brand>)
(..simple <tag>))]
@@ -199,7 +199,7 @@
(|>> ..safe
:abstraction))
- (template [<tag> <alias> <name>]
+ (.template [<tag> <alias> <name>]
[(def: .public <name>
Element
(..simple <tag> (list)))
@@ -271,7 +271,7 @@
{#Circle Circle}
{#Polygon Polygon}))
- (template [<name> <shape> <type> <format>]
+ (.template [<name> <shape> <type> <format>]
[(def: (<name> attributes shape)
(-> Attributes <type> (HTML Any))
(..simple "area" (list& ["shape" <shape>]
@@ -307,7 +307,7 @@
(..tag "map" attributes
(list#mix (function.flipped ..and) head tail)))))
- (template [<name> <tag> <type>]
+ (.template [<name> <tag> <type>]
[(def: .public <name>
(-> Attributes <type>)
(..empty <tag>))]
@@ -319,7 +319,7 @@
[track "track" Track]
)
- (template [<name> <tag>]
+ (.template [<name> <tag>]
[(def: .public (<name> attributes media on_unsupported)
(-> Attributes Media (Maybe Content) Element)
(..tag <tag> attributes
@@ -343,7 +343,7 @@
(-> ID Input)
(|>> ["for"] list (..empty "label")))
- (template [<name> <container_tag> <description_tag> <type>]
+ (.template [<name> <container_tag> <description_tag> <type>]
[(def: .public (<name> description attributes content)
(-> (Maybe Content) Attributes <type> <type>)
(..tag <container_tag> attributes
@@ -361,7 +361,7 @@
[figure "figure" "figcaption" Element]
)
- (template [<name> <tag> <type>]
+ (.template [<name> <tag> <type>]
[(def: .public (<name> attributes content)
(-> Attributes (Maybe Content) <type>)
(|> content
@@ -375,7 +375,7 @@
(type: .public Phrase
(-> Attributes Content Element))
- (template [<name> <tag>]
+ (.template [<name> <tag>]
[(def: .public <name>
Phrase
(..tag <tag>))]
@@ -432,7 +432,7 @@
(type: .public Composite
(-> Attributes Element Element))
- (template [<name> <tag>]
+ (.template [<name> <tag>]
[(def: .public <name>
Composite
(..tag <tag>))]
@@ -450,7 +450,7 @@
[span "span"]
)
- (template [<tag> <name> <input>]
+ (.template [<tag> <name> <input>]
[(def: <name>
(-> <input> (HTML Any))
(..tag <tag> (list)))]
@@ -475,7 +475,7 @@
(def: .public p ..paragraph)
- (template [<name> <tag> <input> <output>]
+ (.template [<name> <tag> <input> <output>]
[(def: .public <name>
(-> Attributes <input> <output>)
(..tag <tag>))]
@@ -494,7 +494,7 @@
[object "object" Parameter Element]
)
- (template [<name> <tag> <input> <output>]
+ (.template [<name> <tag> <input> <output>]
[(def: .public <name>
(-> <input> <output>)
(..tag <tag> (list)))]
@@ -508,7 +508,7 @@
[body "body" Element Body]
)
- (template [<name> <tag> <input> <output>]
+ (.template [<name> <tag> <input> <output>]
[(def: <name>
(-> <input> <output>)
(..tag <tag> (list)))]
@@ -555,7 +555,7 @@
(..tag "table" attributes
content)))
- (template [<name> <doc_type>]
+ (.template [<name> <doc_type>]
[(def: .public <name>
(-> Head Body Document)
(let [doc_type <doc_type>]
diff --git a/stdlib/source/library/lux/ffi.js.lux b/stdlib/source/library/lux/ffi.js.lux
index ece090ecd..ddcac1a30 100644
--- a/stdlib/source/library/lux/ffi.js.lux
+++ b/stdlib/source/library/lux/ffi.js.lux
@@ -197,13 +197,13 @@
(def: (with_io with? without)
(-> Bit Code Code)
(if with?
- (` (io.io (~ without)))
+ (` ((~! io.io) (~ without)))
without))
(def: (io_type io? rawT)
(-> Bit Code Code)
(if io?
- (` (io.IO (~ rawT)))
+ (` ((~! io.IO) (~ rawT)))
rawT))
(def: (with_try with? without_try)
diff --git a/stdlib/source/library/lux/ffi.lua.lux b/stdlib/source/library/lux/ffi.lua.lux
index 1a99178cd..151d1cf3c 100644
--- a/stdlib/source/library/lux/ffi.lua.lux
+++ b/stdlib/source/library/lux/ffi.lua.lux
@@ -178,13 +178,13 @@
(def: (with_io with? without)
(-> Bit Code Code)
(if with?
- (` (io.io (~ without)))
+ (` ((~! io.io) (~ without)))
without))
(def: (io_type io? rawT)
(-> Bit Code Code)
(if io?
- (` (io.IO (~ rawT)))
+ (` ((~! io.IO) (~ rawT)))
rawT))
(def: (with_try with? without_try)
diff --git a/stdlib/source/library/lux/ffi.php.lux b/stdlib/source/library/lux/ffi.php.lux
index 2f58fd4f8..cfcfec9f8 100644
--- a/stdlib/source/library/lux/ffi.php.lux
+++ b/stdlib/source/library/lux/ffi.php.lux
@@ -198,13 +198,13 @@
(def: (with_io with? without)
(-> Bit Code Code)
(if with?
- (` (io.io (~ without)))
+ (` ((~! io.io) (~ without)))
without))
(def: (io_type io? rawT)
(-> Bit Code Code)
(if io?
- (` (io.IO (~ rawT)))
+ (` ((~! io.IO) (~ rawT)))
rawT))
(def: (with_try with? without_try)
diff --git a/stdlib/source/library/lux/ffi.py.lux b/stdlib/source/library/lux/ffi.py.lux
index 4cb39155c..6f6bc2b96 100644
--- a/stdlib/source/library/lux/ffi.py.lux
+++ b/stdlib/source/library/lux/ffi.py.lux
@@ -178,13 +178,13 @@
(def: (with_io with? without)
(-> Bit Code Code)
(if with?
- (` (io.io (~ without)))
+ (` ((~! io.io) (~ without)))
without))
(def: (io_type io? rawT)
(-> Bit Code Code)
(if io?
- (` (io.IO (~ rawT)))
+ (` ((~! io.IO) (~ rawT)))
rawT))
(def: (with_try with? without_try)
diff --git a/stdlib/source/library/lux/ffi.rb.lux b/stdlib/source/library/lux/ffi.rb.lux
index c911e8016..21dae9b6f 100644
--- a/stdlib/source/library/lux/ffi.rb.lux
+++ b/stdlib/source/library/lux/ffi.rb.lux
@@ -191,13 +191,13 @@
(def: (with_io with? without)
(-> Bit Code Code)
(if with?
- (` (io.io (~ without)))
+ (` ((~! io.io) (~ without)))
without))
(def: (io_type io? rawT)
(-> Bit Code Code)
(if io?
- (` (io.IO (~ rawT)))
+ (` ((~! io.IO) (~ rawT)))
rawT))
(def: (with_try with? without_try)
diff --git a/stdlib/source/library/lux/ffi.scm.lux b/stdlib/source/library/lux/ffi.scm.lux
index d89e1833b..8beef44d5 100644
--- a/stdlib/source/library/lux/ffi.scm.lux
+++ b/stdlib/source/library/lux/ffi.scm.lux
@@ -163,13 +163,13 @@
(def: (with_io with? without)
(-> Bit Code Code)
(if with?
- (` (io.io (~ without)))
+ (` ((~! io.io) (~ without)))
without))
(def: (io_type io? rawT)
(-> Bit Code Code)
(if io?
- (` (io.IO (~ rawT)))
+ (` ((~! io.IO) (~ rawT)))
rawT))
(def: (with_try with? without_try)
diff --git a/stdlib/source/library/lux/math/number/int.lux b/stdlib/source/library/lux/math/number/int.lux
index 596b5544b..3967ca6d9 100644
--- a/stdlib/source/library/lux/math/number/int.lux
+++ b/stdlib/source/library/lux/math/number/int.lux
@@ -1,23 +1,23 @@
(.using
- [library
- [lux "*"
- [abstract
- [hash {"+" Hash}]
- [enum {"+" Enum}]
- [interval {"+" Interval}]
- [monoid {"+" Monoid}]
- [equivalence {"+" Equivalence}]
- [codec {"+" Codec}]
- [predicate {"+" Predicate}]
- ["[0]" order {"+" Order}]]
- [control
- ["[0]" maybe]
- ["[0]" try {"+" Try}]]
- [data
- [text {"+" Char}]]]]
- ["[0]" // "_"
- ["[1][0]" nat]
- ["[1][0]" i64]])
+ [library
+ [lux "*"
+ [abstract
+ [hash {"+" Hash}]
+ [enum {"+" Enum}]
+ [interval {"+" Interval}]
+ [monoid {"+" Monoid}]
+ [equivalence {"+" Equivalence}]
+ [codec {"+" Codec}]
+ [predicate {"+" Predicate}]
+ ["[0]" order {"+" Order}]]
+ [control
+ ["[0]" maybe]
+ ["[0]" try {"+" Try}]]
+ [data
+ [text {"+" Char}]]]]
+ ["[0]" // "_"
+ ["[1][0]" nat]
+ ["[1][0]" i64]])
(def: .public (= reference sample)
(-> Int Int Bit)
@@ -246,5 +246,11 @@
(def: .public (right_shifted parameter subject)
(-> Nat Int Int)
- (//i64.or (//i64.and //i64.sign subject)
- (//i64.right_shifted parameter subject)))
+ (with_expansions [<positive> (//i64.right_shifted parameter subject)]
+ (if (< +0 subject)
+ (|> +1
+ (//i64.left_shifted parameter)
+ --
+ (//i64.left_shifted (//nat.- parameter //i64.width))
+ (//i64.or <positive>))
+ <positive>)))
diff --git a/stdlib/source/library/lux/target/js.lux b/stdlib/source/library/lux/target/js.lux
index 6ee7a793c..2e12d2c19 100644
--- a/stdlib/source/library/lux/target/js.lux
+++ b/stdlib/source/library/lux/target/js.lux
@@ -1,6 +1,6 @@
(.using
[library
- [lux {"-" Location Code Label or and function if cond undefined for comment not int try ++ --}
+ [lux {"-" Location Code Label or and function if undefined for comment not int try ++ --}
[control
[pipe {"+" case>}]]
[data
@@ -80,17 +80,17 @@
(def: .public (number value)
(-> Frac Literal)
(:abstraction
- (.cond (f.not_a_number? value)
- "NaN"
+ (cond (f.not_a_number? value)
+ "NaN"
- (f.= f.positive_infinity value)
- "Infinity"
-
- (f.= f.negative_infinity value)
- "-Infinity"
+ (f.= f.positive_infinity value)
+ "Infinity"
+
+ (f.= f.negative_infinity value)
+ "-Infinity"
- ... else
- (|> value %.frac ..expression))))
+ ... else
+ (|> value %.frac ..expression))))
(def: safe
(-> Text Text)
@@ -322,9 +322,12 @@
(-> Expression Statement)
(:abstraction (format "return " (:representation value) ..statement_suffix)))
- (def: .public (delete value)
- (-> Location Statement)
- (:abstraction (format "delete " (:representation value) ..statement_suffix)))
+ (def: .public delete
+ (-> Location Expression)
+ (|>> :representation
+ (format "delete ")
+ ..expression
+ :abstraction))
(def: .public (if test then! else!)
(-> Expression Statement Statement Statement)
@@ -421,13 +424,6 @@
..block))))
)
-(def: .public (cond clauses else!)
- (-> (List [Expression Statement]) Statement Statement)
- (list#mix (.function (_ [test then!] next!)
- (..if test then! next!))
- else!
- (list.reversed clauses)))
-
(template [<apply> <arg>+ <type>+ <function>+]
[(`` (def: .public (<apply> function)
(-> Expression (~~ (template.spliced <type>+)) Computation)
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/extension/directive/jvm.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/extension/directive/jvm.lux
index c91a7aa9f..449060cf0 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/extension/directive/jvm.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/extension/directive/jvm.lux
@@ -1,65 +1,70 @@
(.using
- [library
- [lux {"-" Type Definition}
- ["[0]" host]
- [abstract
- ["[0]" monad {"+" do}]]
- [control
- [pipe {"+" case>}]
- ["<>" parser ("[1]#[0]" monad)
- ["<c>" code {"+" Parser}]
- ["<t>" text]]]
- [data
- ["[0]" product]
- [text
- ["%" format {"+" format}]]
- [collection
- ["[0]" list ("[1]#[0]" functor mix)]
- ["[0]" dictionary]
- ["[0]" sequence]]]
- [macro
- ["[0]" template]]
- [math
- [number
- ["[0]" i32]]]
- [target
- [jvm
- ["_" bytecode {"+" Bytecode}]
- ["[0]" modifier {"+" Modifier} ("[1]#[0]" monoid)]
- ["[0]" attribute]
- ["[0]" field]
- ["[0]" version]
- ["[0]" class]
- ["[0]" constant
- ["[0]" pool {"+" Resource}]]
- [encoding
- ["[0]" name]]
- ["[0]" type {"+" Type Constraint Argument Typed}
- [category {"+" Void Value Return Method Primitive Object Class Array Var Parameter}]
- ["[0]T" lux {"+" Mapping}]
- ["[0]" signature]
- ["[0]" descriptor {"+" Descriptor}]
- ["[0]" parser]]]]
- [tool
- [compiler
- ["[0]" analysis]
- ["[0]" synthesis]
- ["[0]" generation]
- ["[0]" directive {"+" Handler Bundle}]
- ["[0]" phase
- [analysis
- ["[0]A" type]]
- ["[0]" generation
- [jvm
- [runtime {"+" Anchor Definition}]]]
- ["[0]" extension
- ["[0]" bundle]
+ [library
+ [lux {"-" Type Definition Primitive}
+ ["[0]" ffi]
+ [abstract
+ ["[0]" monad {"+" do}]]
+ [control
+ [pipe {"+" case>}]
+ ["<>" parser ("[1]#[0]" monad)
+ ["<c>" code {"+" Parser}]
+ ["<t>" text]]]
+ [data
+ ["[0]" product]
+ [text
+ ["%" format {"+" format}]]
+ [collection
+ ["[0]" list ("[1]#[0]" functor mix)]
+ ["[0]" dictionary]
+ ["[0]" sequence]]]
+ [macro
+ ["[0]" template]]
+ [math
+ [number
+ ["[0]" i32]]]
+ [target
+ [jvm
+ ["_" bytecode {"+" Bytecode}]
+ ["[0]" modifier {"+" Modifier} ("[1]#[0]" monoid)]
+ ["[0]" attribute]
+ ["[0]" field]
+ ["[0]" version]
+ ["[0]" class]
+ ["[0]" constant
+ ["[0]" pool {"+" Resource}]]
+ [encoding
+ ["[0]" name]]
+ ["[0]" type {"+" Type Constraint Argument Typed}
+ [category {"+" Void Value Return Method Primitive Object Class Array Var Parameter}]
+ ["[0]T" lux {"+" Mapping}]
+ ["[0]" signature]
+ ["[0]" descriptor {"+" Descriptor}]
+ ["[0]" parser]]]]
+ [tool
+ [compiler
+ ["[0]" phase]
+ [meta
+ [archive {"+" Archive}]]
+ [language
+ [lux
+ ["[0]" analysis]
+ ["[0]" synthesis]
+ ["[0]" generation]
+ ["[0]" directive {"+" Handler Bundle}]
+ [phase
[analysis
- ["[0]" jvm]]
- [directive
- ["/" lux]]]]]]
- [type
- ["[0]" check {"+" Check}]]]])
+ ["[0]A" type]]
+ [generation
+ [jvm
+ [runtime {"+" Anchor Definition}]]]
+ ["[0]" extension
+ ["[0]" bundle]
+ [analysis
+ ["[0]" jvm]]
+ [directive
+ ["/" lux]]]]]]]]
+ [type
+ ["[0]" check {"+" Check}]]]])
(type: Operation
(directive.Operation Anchor (Bytecode Any) Definition))
@@ -144,8 +149,9 @@
)))
(type: Field
- {#Constant Constant}
- {#Variable Variable})
+ (Variant
+ {#Constant Constant}
+ {#Variable Variable}))
(def: field
(Parser Field)
@@ -155,10 +161,11 @@
))
(type: Method_Definition
- {#Constructor (jvm.Constructor Code)}
- {#Virtual_Method (jvm.Virtual_Method Code)}
- {#Static_Method (jvm.Static_Method Code)}
- {#Overriden_Method (jvm.Overriden_Method Code)})
+ (Variant
+ {#Constructor (jvm.Constructor Code)}
+ {#Virtual_Method (jvm.Virtual_Method Code)}
+ {#Static_Method (jvm.Static_Method Code)}
+ {#Overriden_Method (jvm.Overriden_Method Code)}))
(def: method
(Parser Method_Definition)
@@ -199,7 +206,7 @@
[.#Int type.short [.i64 i32.i32 constant.integer pool.integer]]
[.#Int type.int [.i64 i32.i32 constant.integer pool.integer]]
[.#Int type.long [constant.long pool.long]]
- [.#Frac type.float [host.double_to_float constant.float pool.float]]
+ [.#Frac type.float [ffi.double_to_float constant.float pool.float]]
[.#Frac type.double [constant.double pool.double]]
[.#Nat type.char [.i64 i32.i32 constant.integer pool.integer]]
[.#Text (type.class "java.lang.String" (list)) [pool.string]]
@@ -214,8 +221,10 @@
(field.field (modifier#composite visibility state)
name type (sequence.sequence))))
-(def: (method_definition [mapping selfT] [analyse synthesize generate])
- (-> [Mapping .Type]
+(def: (method_definition archive supers [mapping selfT] [analyse synthesize generate])
+ (-> Archive
+ (List (Type Class))
+ [Mapping .Type]
[analysis.Phase
synthesis.Phase
(generation.Phase Anchor (Bytecode Any) Definition)]
@@ -226,18 +235,18 @@
(directive.lifted_analysis
(case methodC
{#Constructor method}
- (jvm.analyse_constructor_method analyse selfT mapping method)
+ (jvm.analyse_constructor_method analyse archive selfT mapping method)
{#Virtual_Method method}
- (jvm.analyse_virtual_method analyse selfT mapping method)
+ (jvm.analyse_virtual_method analyse archive selfT mapping method)
{#Static_Method method}
- (jvm.analyse_static_method analyse mapping method)
+ (jvm.analyse_static_method analyse archive mapping method)
{#Overriden_Method method}
- (jvm.analyse_overriden_method analyse selfT mapping method))))]
+ (jvm.analyse_overriden_method analyse archive selfT mapping supers method))))]
(directive.lifted_synthesis
- (synthesize methodA)))))
+ (synthesize archive methodA)))))
(def: jvm::class
(Handler Anchor (Bytecode Any) Definition)
@@ -250,7 +259,7 @@
(<c>.tuple (<>.some ..annotation))
(<c>.tuple (<>.some ..field))
(<c>.tuple (<>.some ..method)))
- (function (_ extension phase
+ (function (_ extension phase archive
[[name parameters]
super_class
super_interfaces
@@ -282,7 +291,7 @@
.let [analyse (value@ [directive.#analysis directive.#phase] state)
synthesize (value@ [directive.#synthesis directive.#phase] state)
generate (value@ [directive.#generation directive.#phase] state)]
- methods (monad.each ! (..method_definition [mapping selfT] [analyse synthesize generate])
+ methods (monad.each ! (..method_definition archive (list& super_class super_interfaces) [mapping selfT] [analyse synthesize generate])
methods)
... _ (directive.lifted_generation
... (generation.save! true ["" name]
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/extension/generation/jvm/common.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/extension/generation/jvm/common.lux
index 4c7cd1294..9ed84603f 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/extension/generation/jvm/common.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/extension/generation/jvm/common.lux
@@ -1,46 +1,47 @@
(.using
- [library
- [lux {"-" Type}
- [abstract
- ["[0]" monad {"+" do}]]
- [control
- ["[0]" try]
- ["[0]" exception {"+" exception:}]
- ["<>" parser
- ["<s>" synthesis {"+" Parser}]]]
- [data
- ["[0]" product]
- [number
- ["[0]" i32]
- ["f" frac]]
- [collection
- ["[0]" list ("[1]#[0]" monad)]
- ["[0]" dictionary]]]
- [target
- [jvm
- ["_" bytecode {"+" Label Bytecode} ("[1]#[0]" monad)]
- [encoding
- ["[0]" signed {"+" S4}]]
- ["[0]" type {"+" Type}
- [category {"+" Primitive Class}]]]]]]
- ["[0]" ///// "_"
- [generation
- [extension {"+" Nullary Unary Binary Trinary Variadic
- nullary unary binary trinary variadic}]
- ["///" jvm "_"
- ["[1][0]" value]
- ["[1][0]" runtime {"+" Operation Phase Bundle Handler}]
- ["[1][0]" function "_"
- ["[1]" abstract]]]]
- [extension
- ["[1]extension" /]
- ["[1][0]" bundle]]
- [//
- ["/[1][0]" synthesis {"+" Synthesis %synthesis}]
- [///
- ["[1]" phase]
- [meta
- [archive {"+" Archive}]]]]])
+ [library
+ [lux {"-" Type Label Primitive}
+ [abstract
+ ["[0]" monad {"+" do}]]
+ [control
+ ["[0]" try]
+ ["[0]" exception {"+" exception:}]
+ ["<>" parser
+ ["<[0]>" synthesis {"+" Parser}]]]
+ [data
+ ["[0]" product]
+ [collection
+ ["[0]" list ("[1]#[0]" monad)]
+ ["[0]" dictionary]]]
+ [math
+ [number
+ ["f" frac]
+ ["[0]" i32]]]
+ [target
+ [jvm
+ ["_" bytecode {"+" Label Bytecode} ("[1]#[0]" monad)]
+ [encoding
+ ["[0]" signed {"+" S4}]]
+ ["[0]" type {"+" Type}
+ [category {"+" Primitive Class}]]]]]]
+ ["[0]" ///// "_"
+ [generation
+ [extension {"+" Nullary Unary Binary Trinary Variadic
+ nullary unary binary trinary variadic}]
+ ["///" jvm "_"
+ ["[1][0]" value]
+ ["[1][0]" runtime {"+" Operation Phase Bundle Handler}]
+ ["[1][0]" function "_"
+ ["[1]" abstract]]]]
+ [extension
+ ["[1]extension" /]
+ ["[1][0]" bundle]]
+ [//
+ ["/[1][0]" synthesis {"+" Synthesis %synthesis}]
+ [///
+ ["[1]" phase]
+ [meta
+ [archive {"+" Archive}]]]]])
(def: .public (custom [parser handler])
(All (_ s)
@@ -48,7 +49,7 @@
(-> Text Phase Archive s (Operation (Bytecode Any)))]
Handler))
(function (_ extension_name phase archive input)
- (case (<s>.result parser input)
+ (case (<synthesis>.result parser input)
{try.#Success input'}
(handler extension_name phase archive input')
@@ -99,11 +100,11 @@
... TODO: Get rid of this ASAP
(def: lux::syntax_char_case!
(..custom [($_ <>.and
- <s>.any
- <s>.any
- (<>.some (<s>.tuple ($_ <>.and
- (<s>.tuple (<>.many <s>.i64))
- <s>.any))))
+ <synthesis>.any
+ <synthesis>.any
+ (<>.some (<synthesis>.tuple ($_ <>.and
+ (<synthesis>.tuple (<>.many <synthesis>.i64))
+ <synthesis>.any))))
(function (_ extension_name phase archive [inputS elseS conditionalsS])
(do [! /////.monad]
[@end ///runtime.forge_label
@@ -227,7 +228,7 @@
(def: (::toString class from)
(-> (Type Class) (Type Primitive) (Bytecode Any))
- (_.invokestatic class "toString" (type.method [(list from) ..$String (list)])))
+ (_.invokestatic class "toString" (type.method [(list) (list from) ..$String (list)])))
(template [<name> <prepare> <transform>]
[(def: (<name> inputG)
@@ -304,7 +305,7 @@
($_ _.composite
inputG
..ensure_string
- (_.invokevirtual ..$String "length" (type.method [(list) type.int (list)]))
+ (_.invokevirtual ..$String "length" (type.method [(list) (list) type.int (list)]))
..lux_int))
(def: no_op (Bytecode Any) (_#in []))
@@ -318,13 +319,13 @@
<op> <post>))]
[text::= ..no_op ..no_op
- (_.invokevirtual ..$Object "equals" (type.method [(list ..$Object) type.boolean (list)]))
+ (_.invokevirtual ..$Object "equals" (type.method [(list) (list ..$Object) type.boolean (list)]))
(///value.wrap type.boolean)]
[text::< ..ensure_string ..ensure_string
- (_.invokevirtual ..$String "compareTo" (type.method [(list ..$String) type.int (list)]))
+ (_.invokevirtual ..$String "compareTo" (type.method [(list) (list ..$String) type.int (list)]))
(..predicate _.iflt)]
[text::char ..ensure_string ..jvm_int
- (_.invokevirtual ..$String "charAt" (type.method [(list type.int) type.char (list)]))
+ (_.invokevirtual ..$String "charAt" (type.method [(list) (list type.int) type.char (list)]))
..lux_int]
)
@@ -333,7 +334,7 @@
($_ _.composite
leftG ..ensure_string
rightG ..ensure_string
- (_.invokevirtual ..$String "concat" (type.method [(list ..$String) ..$String (list)]))))
+ (_.invokevirtual ..$String "concat" (type.method [(list) (list ..$String) ..$String (list)]))))
(def: (text::clip [startG endG subjectG])
(Trinary (Bytecode Any))
@@ -341,9 +342,9 @@
subjectG ..ensure_string
startG ..jvm_int
endG ..jvm_int
- (_.invokevirtual ..$String "substring" (type.method [(list type.int type.int) ..$String (list)]))))
+ (_.invokevirtual ..$String "substring" (type.method [(list) (list type.int type.int) ..$String (list)]))))
-(def: index_method (type.method [(list ..$String type.int) type.int (list)]))
+(def: index_method (type.method [(list) (list ..$String type.int) type.int (list)]))
(def: (text::index [startG partG textG])
(Trinary (Bytecode Any))
(do _.monad
@@ -377,7 +378,7 @@
(/////bundle.install "char" (binary ..text::char))
(/////bundle.install "clip" (trinary ..text::clip)))))
-(def: string_method (type.method [(list ..$String) type.void (list)]))
+(def: string_method (type.method [(list) (list ..$String) type.void (list)]))
(def: (io::log messageG)
(Unary (Bytecode Any))
($_ _.composite
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/extension/generation/jvm/host.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/extension/generation/jvm/host.lux
index f367bd949..6b26d8cfb 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/extension/generation/jvm/host.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/extension/generation/jvm/host.lux
@@ -1,73 +1,74 @@
(.using
- [library
- [lux {"-" Type}
- [abstract
- ["[0]" monad {"+" do}]]
- [control
- ["[0]" maybe]
- ["[0]" try]
- ["[0]" exception {"+" exception:}]
- ["<>" parser
- ["<t>" text]
- ["<s>" synthesis {"+" Parser}]]]
- [data
- ["[0]" product]
- ["[0]" text ("[1]#[0]" equivalence)
- ["%" format {"+" format}]]
- [number
- ["[0]" i32]]
- [collection
- ["[0]" list ("[1]#[0]" monad)]
- ["[0]" dictionary {"+" Dictionary}]
- ["[0]" set]
- ["[0]" sequence]]
- ["[0]" format "_"
- ["[1]" binary]]]
- [target
- [jvm
- ["[0]" version]
- ["[0]" modifier ("[1]#[0]" monoid)]
- ["[0]" method {"+" Method}]
- ["[0]" class {"+" Class}]
- [constant
- [pool {"+" Resource}]]
- [encoding
- ["[0]" name]]
- ["_" bytecode {"+" Label Bytecode} ("[1]#[0]" monad)
- ["__" instruction {"+" Primitive_Array_Type}]]
- ["[0]" type {"+" Type Typed Argument}
- ["[0]" category {"+" Void Value' Value Return' Return Primitive Object Array Var Parameter}]
- ["[0]" box]
- ["[0]" reflection]
- ["[0]" signature]
- ["[0]" parser]]]]]]
- ["[0]" // "_"
- [common {"+" custom}]
- ["///[1]" //// "_"
- [generation
- [extension {"+" Nullary Unary Binary Trinary Variadic
- nullary unary binary trinary variadic}]
- ["///" jvm
- ["[1][0]" runtime {"+" Operation Bundle Phase Handler}]
- ["[1][0]" reference]
- [function
- [field
- [variable
- ["[0]" foreign]]]]]]
- [extension
- ["[1][0]" bundle]
- [analysis
- ["/" jvm]]]
- ["/[1]" // "_"
- [analysis {"+" Environment}]
- ["[1][0]" synthesis {"+" Synthesis Path %synthesis}]
- ["[1][0]" generation]
- [///
- ["[1]" phase]
- [reference
- ["[1][0]" variable {"+" Variable}]]
- [meta
- ["[0]" archive {"+" Archive}]]]]]])
+ [library
+ [lux {"-" Type Primitive}
+ [abstract
+ ["[0]" monad {"+" do}]]
+ [control
+ ["[0]" maybe]
+ ["[0]" exception {"+" exception:}]
+ ["<>" parser
+ ["<t>" text]
+ ["<s>" synthesis {"+" Parser}]]]
+ [data
+ ["[0]" product]
+ ["[0]" text ("[1]#[0]" equivalence)]
+ [collection
+ ["[0]" list ("[1]#[0]" monad monoid)]
+ ["[0]" dictionary {"+" Dictionary}]
+ ["[0]" set {"+" Set}]
+ ["[0]" sequence]]
+ ["[0]" format "_"
+ ["[1]" binary]]]
+ [math
+ [number
+ ["[0]" i32]]]
+ [target
+ [jvm
+ ["[0]" version]
+ ["[0]" modifier ("[1]#[0]" monoid)]
+ ["[0]" method {"+" Method}]
+ ["[0]" class {"+" Class}]
+ [constant
+ [pool {"+" Resource}]]
+ [encoding
+ ["[0]" name]]
+ ["_" bytecode {"+" Bytecode} ("[1]#[0]" monad)
+ ["__" instruction {"+" Primitive_Array_Type}]]
+ ["[0]" type {"+" Type Typed Argument}
+ ["[0]" category {"+" Void Value' Value Return' Return Primitive Object Array Var Parameter}]
+ ["[0]" box]
+ ["[0]" reflection]
+ ["[0]" signature]
+ ["[0]" parser]]]]]]
+ ["[0]" // "_"
+ [common {"+" custom}]
+ ["///[1]" //// "_"
+ [generation
+ [extension {"+" Nullary Unary Binary Trinary Variadic
+ nullary unary binary trinary variadic}]
+ ["///" jvm
+ ["[1][0]" runtime {"+" Operation Bundle Phase Handler}]
+ ["[1][0]" reference]
+ [function
+ [field
+ [variable
+ ["[0]" foreign]]]]]]
+ [extension
+ ["[1][0]" bundle]
+ [analysis
+ ["/" jvm]]]
+ ["/[1]" // "_"
+ [analysis {"+" Environment}]
+ ["[1][0]" synthesis {"+" Synthesis Path %synthesis}]
+ ["[1][0]" generation]
+ [///
+ ["[1]" phase]
+ ["[1][0]" reference
+ ["[2][0]" variable {"+" Variable}]]
+ [meta
+ ["[0]" archive {"+" Archive}
+ ["[0]" artifact]
+ ["[0]" dependency]]]]]]])
(template [<name> <0> <1>]
[(def: <name>
@@ -554,7 +555,7 @@
[]
(in ($_ _.composite
(_.string class)
- (_.invokestatic ..$Class "forName" (type.method [(list ..$String) ..$Class (list)]))))))]))
+ (_.invokestatic ..$Class "forName" (type.method [(list) (list ..$String) ..$Class (list)]))))))]))
(def: object::instance?
Handler
@@ -566,7 +567,7 @@
(in ($_ _.composite
objectG
(_.instanceof (type.class class (list)))
- (_.invokestatic ..$Boolean "valueOf" (type.method [(list type.boolean) ..$Boolean (list)]))))))]))
+ (_.invokestatic ..$Boolean "valueOf" (type.method [(list) (list type.boolean) ..$Boolean (list)]))))))]))
(def: reflection
(All (_ category)
@@ -588,7 +589,7 @@
(let [$<object> (type.class <object> (list))]
($_ _.composite
valueG
- (_.invokestatic $<object> "valueOf" (type.method [(list <type>) $<object> (list)]))))
+ (_.invokestatic $<object> "valueOf" (type.method [(list) (list <type>) $<object> (list)]))))
(and (text#= <object>
from)
@@ -598,7 +599,7 @@
($_ _.composite
valueG
(_.checkcast $<object>)
- (_.invokevirtual $<object> <unwrap> (type.method [(list) <type> (list)]))))]
+ (_.invokevirtual $<object> <unwrap> (type.method [(list) (list) <type> (list)]))))]
[box.boolean type.boolean "booleanValue"]
[box.byte type.byte "byteValue"]
@@ -634,7 +635,7 @@
[(reflection.reflection reflection.float) type.float]
[(reflection.reflection reflection.double) type.double]
[(reflection.reflection reflection.char) type.char])
- (dictionary.from_list text.hash)))
+ (dictionary.of_list text.hash)))
(def: get::static
Handler
@@ -718,7 +719,8 @@
valueG
putG))))]))
-(type: Input (Typed Synthesis))
+(type: Input
+ (Typed Synthesis))
(def: input
(Parser Input)
@@ -755,7 +757,7 @@
[inputsTG (monad.each ! (generate_input generate archive) inputsTS)]
(in ($_ _.composite
(monad.each _.monad product.right inputsTG)
- (_.invokestatic class method (type.method [(list#each product.left inputsTG) outputT (list)]))
+ (_.invokestatic class method (type.method [(list) (list#each product.left inputsTG) outputT (list)]))
(prepare_output outputT)))))]))
(template [<name> <invoke>]
@@ -771,7 +773,7 @@
objectG
(_.checkcast class)
(monad.each _.monad product.right inputsTG)
- (<invoke> class method (type.method [(list#each product.left inputsTG) outputT (list)]))
+ (<invoke> class method (type.method [(list) (list#each product.left inputsTG) outputT (list)]))
(prepare_output outputT)))))]))]
[invoke::virtual _.invokevirtual]
@@ -790,7 +792,7 @@
(_.new class)
_.dup
(monad.each _.monad product.right inputsTG)
- (_.invokespecial class "<init>" (type.method [(list#each product.left inputsTG) type.void (list)]))))))]))
+ (_.invokespecial class "<init>" (type.method [(list) (list#each product.left inputsTG) type.void (list)]))))))]))
(def: bundle::member
Bundle
@@ -875,10 +877,10 @@
(function (again body)
(case body
(^template [<tag>]
- [(^ {<tag> value})
+ [(^ <tag>)
body])
- ([//////synthesis.#Primitive]
- [//////synthesis.constant])
+ ([{//////synthesis.#Primitive _}]
+ [(//////synthesis.constant _)])
(^ (//////synthesis.variant [lefts right? sub]))
(//////synthesis.variant [lefts right? (again sub)])
@@ -936,7 +938,8 @@
(def: (anonymous_init_method env)
(-> (Environment Synthesis) (Type category.Method))
- (type.method [(list.repeated (list.size env) ..$Object)
+ (type.method [(list)
+ (list.repeated (list.size env) ..$Object)
type.void
(list)]))
@@ -955,7 +958,7 @@
{.#Some ($_ _.composite
(_.aload 0)
(monad.each _.monad product.right inputsTG)
- (_.invokespecial super_class "<init>" (type.method [(list#each product.left inputsTG) type.void (list)]))
+ (_.invokespecial super_class "<init>" (type.method [(list) (list#each product.left inputsTG) type.void (list)]))
store_capturedG
_.return)})))
@@ -999,6 +1002,28 @@
... (# type.equivalence = type.double returnT)
_.dreturn))))
+(def: (method_dependencies archive method)
+ (-> Archive (/.Overriden_Method Synthesis) (Operation (Set artifact.Dependency)))
+ (let [[_super _name _strict_fp? _annotations
+ _t_vars _this _arguments _return _exceptions
+ bodyS] method]
+ (dependency.dependencies archive bodyS)))
+
+(def: (anonymous_dependencies archive inputsTS overriden_methods)
+ (-> Archive (List Input) (List [(Environment Synthesis) (/.Overriden_Method Synthesis)])
+ (Operation (Set artifact.Dependency)))
+ (do [! //////.monad]
+ [all_input_dependencies (monad.each ! (|>> product.right (dependency.dependencies archive)) inputsTS)
+ all_closure_dependencies (|> overriden_methods
+ (list#each product.left)
+ list.together
+ (monad.each ! (dependency.dependencies archive)))
+ all_method_dependencies (monad.each ! (|>> product.right (method_dependencies archive)) overriden_methods)]
+ (in (dependency.all ($_ list#composite
+ all_input_dependencies
+ all_closure_dependencies
+ all_method_dependencies)))))
+
(def: class::anonymous
Handler
(..custom
@@ -1011,7 +1036,8 @@
inputsTS
overriden_methods])
(do [! //////.monad]
- [[context _] (//////generation.with_new_context archive (in []))
+ [all_dependencies (anonymous_dependencies archive inputsTS overriden_methods)
+ [context _] (//////generation.with_new_context archive all_dependencies (in []))
.let [[module_id artifact_id] context
anonymous_class_name (///runtime.class_name context)
class (type.class anonymous_class_name (list))
@@ -1021,14 +1047,14 @@
... Combine them.
list#conjoint
... Remove duplicates.
- (set.from_list //////synthesis.hash)
+ (set.of_list //////synthesis.hash)
set.list)
global_mapping (|> total_environment
... Give them names as "foreign" variables.
list.enumeration
(list#each (function (_ [id capture])
[capture {//////variable.#Foreign id}]))
- (dictionary.from_list //////variable.hash))
+ (dictionary.of_list //////synthesis.hash))
normalized_methods (list#each (function (_ [environment
[ownerT name
strict_fp? annotations vars
@@ -1041,7 +1067,7 @@
(|> global_mapping
(dictionary.value capture)
maybe.trusted)]))
- (dictionary.from_list //////variable.hash))]
+ (dictionary.of_list //////variable.hash))]
[ownerT name
strict_fp? annotations vars
self_name arguments returnT exceptionsT
@@ -1062,7 +1088,8 @@
method.strict
modifier#identity))
name
- (type.method [(list#each product.right arguments)
+ (type.method [(list)
+ (list#each product.right arguments)
returnT
exceptionsT])
(list)
@@ -1081,7 +1108,7 @@
method_definitions)
(sequence.sequence)))
_ (//////generation.execute! [anonymous_class_name bytecode])
- _ (//////generation.save! (%.nat artifact_id) [anonymous_class_name bytecode])]
+ _ (//////generation.save! artifact_id {.#None} [anonymous_class_name bytecode])]
(anonymous_instance generate archive class total_environment)))]))
(def: bundle::class
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/jvm/case.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/jvm/case.lux
index 9be2267ea..0d2774331 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/jvm/case.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/jvm/case.lux
@@ -1,39 +1,40 @@
(.using
- [library
- [lux {"-" Type if let case int}
- [abstract
- ["[0]" monad {"+" do}]]
- [control
- ["[0]" function]]
- [data
- [number
- ["[0]" i32]
- ["n" nat]]
- [collection
- ["[0]" list ("[1]#[0]" mix)]]]
- [target
- [jvm
- ["_" bytecode {"+" Label Bytecode} ("[1]#[0]" monad)]
- ["[0]" type {"+" Type}
- [category {"+" Method}]]]]]]
- ["[0]" // "_"
- ["[1][0]" type]
- ["[1][0]" runtime {"+" Operation Phase Generator}]
- ["[1][0]" value]
- ["[1][0]" structure]
- [////
- ["[0]" synthesis {"+" Path Synthesis}]
- ["[0]" generation]
- [///
- ["[0]" phase ("operation#[0]" monad)]
- [reference
- [variable {"+" Register}]]]]])
+ [library
+ [lux {"-" Type Label if let case int}
+ [abstract
+ ["[0]" monad {"+" do}]]
+ [control
+ ["[0]" function]]
+ [data
+ [collection
+ ["[0]" list ("[1]#[0]" mix)]]]
+ [math
+ [number
+ ["n" nat]
+ ["[0]" i32]]]
+ [target
+ [jvm
+ ["_" bytecode {"+" Label Bytecode} ("[1]#[0]" monad)]
+ ["[0]" type {"+" Type}
+ [category {"+" Method}]]]]]]
+ ["[0]" // "_"
+ ["[1][0]" type]
+ ["[1][0]" runtime {"+" Operation Phase Generator}]
+ ["[1][0]" value]
+ ["[1][0]" structure]
+ [////
+ ["[0]" synthesis {"+" Path Synthesis}]
+ ["[0]" generation]
+ [///
+ ["[0]" phase ("operation#[0]" monad)]
+ [reference
+ [variable {"+" Register}]]]]])
(def: equals_name
"equals")
(def: equals_type
- (type.method [(list //type.value) type.boolean (list)]))
+ (type.method [(list) (list //type.value) type.boolean (list)]))
(def: (pop_alt stack_depth)
(-> Nat (Bytecode Any))
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/jvm/function.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/jvm/function.lux
index b9d62421b..fd110c5d2 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/jvm/function.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/jvm/function.lux
@@ -1,62 +1,65 @@
(.using
- [library
- [lux {"-" Type}
- [abstract
- ["[0]" monad {"+" do}]]
- [data
- [number
- ["[0]" i32]
- ["n" nat]]
- [collection
- ["[0]" list ("[1]#[0]" monoid functor)]
- ["[0]" sequence]]
- ["[0]" format "_"
- ["[1]" binary]]]
- [target
- [jvm
- ["[0]" version]
- ["[0]" modifier {"+" Modifier} ("[1]#[0]" monoid)]
- ["[0]" field {"+" Field}]
- ["[0]" method {"+" Method}]
- ["_" bytecode {"+" Label Bytecode} ("[1]#[0]" monad)]
- ["[0]" class {"+" Class}]
- ["[0]" type {"+" Type}
- [category {"+" Return' Value'}]
- ["[0]" reflection]]
- ["[0]" constant
- [pool {"+" Resource}]]
- [encoding
- ["[0]" name {"+" External Internal}]
- ["[0]" unsigned]]]]
- [tool
- [compiler
- [meta
- ["[0]" archive {"+" Archive}]]]]]]
- ["[0]" / "_"
- ["[1][0]" abstract]
- [field
- [constant
- ["[1][0]" arity]]
- [variable
- ["[1][0]" foreign]
- ["[1][0]" partial]]]
- [method
- ["[1][0]" init]
- ["[1][0]" new]
- ["[1][0]" implementation]
- ["[1][0]" reset]
- ["[1][0]" apply]]
- ["/[1]" // "_"
- ["[1][0]" runtime {"+" Operation Phase Generator}]
- [////
- [analysis {"+" Environment}]
- [synthesis {"+" Synthesis Abstraction Apply}]
- ["[0]" generation]
- [///
- ["[0]" arity {"+" Arity}]
- ["[0]" phase]
- [reference
- [variable {"+" Register}]]]]]])
+ [library
+ [lux {"-" Type Label}
+ [abstract
+ ["[0]" monad {"+" do}]]
+ [data
+ ["[0]" product]
+ [collection
+ ["[0]" list ("[1]#[0]" monoid functor)]
+ ["[0]" sequence]]
+ ["[0]" format "_"
+ ["[1]" binary]]]
+ [math
+ [number
+ ["n" nat]
+ ["[0]" i32]]]
+ [target
+ [jvm
+ ["[0]" version]
+ ["[0]" modifier {"+" Modifier} ("[1]#[0]" monoid)]
+ ["[0]" field {"+" Field}]
+ ["[0]" method {"+" Method}]
+ ["_" bytecode {"+" Label Bytecode} ("[1]#[0]" monad)]
+ ["[0]" class {"+" Class}]
+ ["[0]" type {"+" Type}
+ [category {"+" Return' Value'}]
+ ["[0]" reflection]]
+ ["[0]" constant
+ [pool {"+" Resource}]]
+ [encoding
+ ["[0]" name {"+" External Internal}]
+ ["[0]" unsigned]]]]
+ [tool
+ [compiler
+ [meta
+ ["[0]" archive {"+" Archive}
+ ["[0]" dependency]]]]]]]
+ ["[0]" / "_"
+ ["[1][0]" abstract]
+ [field
+ [constant
+ ["[1][0]" arity]]
+ [variable
+ ["[1][0]" foreign]
+ ["[1][0]" partial]]]
+ [method
+ ["[1][0]" init]
+ ["[1][0]" new]
+ ["[1][0]" implementation]
+ ["[1][0]" reset]
+ ["[1][0]" apply]]
+ ["/[1]" // "_"
+ ["[1][0]" runtime {"+" Operation Phase Generator}]
+ [////
+ [analysis {"+" Environment}]
+ [synthesis {"+" Synthesis Abstraction Apply}]
+ ["[0]" generation]
+ [///
+ ["[0]" arity {"+" Arity}]
+ ["[0]" phase]
+ [reference
+ [variable {"+" Register}]]]]]])
(def: .public (with generate archive @begin class environment arity body)
(-> Phase Archive Label External (Environment Synthesis) Arity (Bytecode Any)
@@ -98,8 +101,9 @@
(def: .public (abstraction generate archive [environment arity bodyS])
(Generator Abstraction)
(do phase.monad
- [@begin //runtime.forge_label
- [function_context bodyG] (generation.with_new_context archive
+ [dependencies (dependency.dependencies archive bodyS)
+ @begin //runtime.forge_label
+ [function_context bodyG] (generation.with_new_context archive dependencies
(generation.with_anchor [@begin ..this_offset]
(generate archive bodyS)))
.let [function_class (//runtime.class_name function_context)]
@@ -111,9 +115,9 @@
fields
methods
(sequence.sequence)))
- .let [bytecode (format.result class.writer class)]
- _ (generation.execute! [function_class bytecode])
- _ (generation.save! function_class {.#None} [function_class bytecode])]
+ .let [bytecode [function_class (format.result class.writer class)]]
+ _ (generation.execute! bytecode)
+ _ (generation.save! (product.right function_context) {.#None} bytecode)]
(in instance)))
(def: .public (apply generate archive [abstractionS inputsS])
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/jvm/function/field/variable/partial.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/jvm/function/field/variable/partial.lux
index cca523398..a0880a4e2 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/jvm/function/field/variable/partial.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/jvm/function/field/variable/partial.lux
@@ -1,33 +1,33 @@
(.using
- [library
- [lux {"-" Type}
- [abstract
- ["[0]" monad]]
- [data
- [number
- ["n" nat]]
- [collection
- ["[0]" list ("[1]#[0]" functor)]]]
- [target
- [jvm
- ["[0]" field {"+" Field}]
- ["_" bytecode {"+" Label Bytecode} ("[1]#[0]" monad)]
- [type {"+" Type}
- [category {"+" Class}]]
- [constant
- [pool {"+" Resource}]]]]]]
- ["[0]" / "_"
- ["[1][0]" count]
- ["/[1]" //
- ["/[1]" // "_"
+ [library
+ [lux {"-" Type}
+ [abstract
+ ["[0]" monad]]
+ [data
+ [collection
+ ["[0]" list ("[1]#[0]" functor)]]]
+ [math
+ [number
+ ["n" nat]]]
+ [target
+ [jvm
+ ["[0]" field {"+" Field}]
+ ["_" bytecode {"+" Bytecode} ("[1]#[0]" monad)]
+ [type {"+" Type}
+ [category {"+" Class}]]
[constant
- ["[1][0]" arity]]
- ["//[1]" /// "_"
- ["[1][0]" reference]
- [//////
- ["[0]" arity {"+" Arity}]
- [reference
- [variable {"+" Register}]]]]]]])
+ [pool {"+" Resource}]]]]]]
+ ["[0]" //
+ ["[1][0]" count]
+ ["/[1]" // "_"
+ [constant
+ ["[1][0]" arity]]
+ ["//[1]" /// "_"
+ ["[1][0]" reference]
+ [//////
+ ["[0]" arity {"+" Arity}]
+ [reference
+ [variable {"+" Register}]]]]]])
(def: .public (initial amount)
(-> Nat (Bytecode Any))
@@ -53,6 +53,6 @@
(-> Arity (Bytecode Any))
(if (arity.multiary? arity)
($_ _.composite
- /count.initial
+ //count.initial
(initial (n.- ///arity.minimum arity)))
(_#in [])))
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/jvm/function/method/apply.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/jvm/function/method/apply.lux
index 094287f9a..050ca318a 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/jvm/function/method/apply.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/jvm/function/method/apply.lux
@@ -1,51 +1,52 @@
(.using
- [library
- [lux {"-" Type type}
- [abstract
- ["[0]" monad {"+" do}]]
- [control
- ["[0]" try]]
- [data
- [number
- ["n" nat]
- ["i" int]
- ["[0]" i32]]
- [collection
- ["[0]" list ("[1]#[0]" monoid functor)]]]
- [target
- [jvm
- ["_" bytecode {"+" Label Bytecode} ("[1]#[0]" monad)]
- ["[0]" method {"+" Method}]
- [constant
- [pool {"+" Resource}]]
- [encoding
- ["[0]" signed]]
- ["[0]" type {"+" Type}
- ["[0]" category {"+" Class}]]]]]]
- ["[0]" //
- ["[1][0]" reset]
- ["[1][0]" implementation]
- ["[1][0]" init]
- ["/[1]" // "_"
- ["[1][0]" abstract]
- [field
+ [library
+ [lux {"-" Type Label type}
+ [abstract
+ ["[0]" monad {"+" do}]]
+ [control
+ ["[0]" try]]
+ [data
+ [collection
+ ["[0]" list ("[1]#[0]" monoid functor)]]]
+ [math
+ [number
+ ["n" nat]
+ ["i" int]
+ ["[0]" i32]]]
+ [target
+ [jvm
+ ["_" bytecode {"+" Label Bytecode} ("[1]#[0]" monad)]
+ ["[0]" method {"+" Method}]
[constant
- ["[1][0]" arity]]
- [variable
- ["[1][0]" partial
- ["[1]/[0]" count]]
- ["[1][0]" foreign]]]
- ["/[1]" // "_"
- ["[1][0]" runtime]
- ["[1][0]" value]
- ["[1][0]" reference]
- [////
- [analysis {"+" Environment}]
- [synthesis {"+" Synthesis}]
- [///
- [arity {"+" Arity}]
- [reference
- [variable {"+" Register}]]]]]]])
+ [pool {"+" Resource}]]
+ [encoding
+ ["[0]" signed]]
+ ["[0]" type {"+" Type}
+ ["[0]" category {"+" Class}]]]]]]
+ ["[0]" //
+ ["[1][0]" reset]
+ ["[1][0]" implementation]
+ ["[1][0]" init]
+ ["/[1]" // "_"
+ ["[1][0]" abstract]
+ [field
+ [constant
+ ["[1][0]" arity]]
+ [variable
+ ["[1][0]" partial]
+ ["[1][0]" count]
+ ["[1][0]" foreign]]]
+ ["/[1]" // "_"
+ ["[1][0]" runtime]
+ ["[1][0]" value]
+ ["[1][0]" reference]
+ [////
+ [analysis {"+" Environment}]
+ [synthesis {"+" Synthesis}]
+ [///
+ [arity {"+" Arity}]
+ [reference
+ [variable {"+" Register}]]]]]]])
(def: (increment by)
(-> Nat (Bytecode Any))
@@ -143,7 +144,7 @@
(_.new class)
_.dup
current_environment
- ///partial/count.value
+ ///count.value
(..increment apply_arity)
current_partials
(..inputs ..this_offset apply_arity)
@@ -152,6 +153,6 @@
_.areturn)))))))
(monad.all _.monad))]]
($_ _.composite
- ///partial/count.value
+ ///count.value
(_.tableswitch (try.trusted (signed.s4 +0)) @default [@labelsH @labelsT])
cases)))})))
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/jvm/function/method/implementation.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/jvm/function/method/implementation.lux
index 11e2013e2..664e0fbc8 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/jvm/function/method/implementation.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/jvm/function/method/implementation.lux
@@ -1,28 +1,29 @@
(.using
- [library
- [lux {"-" Type type}
- [data
- [collection
- ["[0]" list]]]
- [target
- [jvm
- ["[0]" method {"+" Method}]
- ["_" bytecode {"+" Label Bytecode}]
- [constant
- [pool {"+" Resource}]]
- ["[0]" type {"+" Type}
- ["[0]" category]]]]]]
- ["[0]" //
- ["//[1]" /// "_"
- ["[1][0]" type]
- [//////
- [arity {"+" Arity}]]]])
+ [library
+ [lux {"-" Type Label type}
+ [data
+ [collection
+ ["[0]" list]]]
+ [target
+ [jvm
+ ["[0]" method {"+" Method}]
+ ["_" bytecode {"+" Label Bytecode}]
+ [constant
+ [pool {"+" Resource}]]
+ ["[0]" type {"+" Type}
+ ["[0]" category]]]]]]
+ ["[0]" //
+ ["//[1]" /// "_"
+ ["[1][0]" type]
+ [//////
+ [arity {"+" Arity}]]]])
(def: .public name "impl")
(def: .public (type arity)
(-> Arity (Type category.Method))
- (type.method [(list.repeated arity ////type.value)
+ (type.method [(list)
+ (list.repeated arity ////type.value)
////type.value
(list)]))
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/jvm/function/method/init.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/jvm/function/method/init.lux
index a4559bbd0..37278725b 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/jvm/function/method/init.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/jvm/function/method/init.lux
@@ -1,45 +1,46 @@
(.using
- [library
- [lux {"-" Type type}
- [abstract
- ["[0]" monad]]
- [control
- ["[0]" try]]
- [data
- [number
- ["n" nat]]
- [collection
- ["[0]" list ("[1]#[0]" monoid functor)]]]
- [target
- [jvm
- ["_" bytecode {"+" Bytecode}]
- ["[0]" method {"+" Method}]
- [encoding
- ["[0]" unsigned]]
- [constant
- [pool {"+" Resource}]]
- ["[0]" type {"+" Type}
- ["[0]" category {"+" Class Value}]]]]]]
- ["[0]" //
- ["[1][0]" implementation]
- ["/[1]" // "_"
- ["[1][0]" abstract]
- [field
+ [library
+ [lux {"-" Type type}
+ [abstract
+ ["[0]" monad]]
+ [control
+ ["[0]" try]]
+ [data
+ [collection
+ ["[0]" list ("[1]#[0]" monoid functor)]]]
+ [math
+ [number
+ ["n" nat]]]
+ [target
+ [jvm
+ ["_" bytecode {"+" Bytecode}]
+ ["[0]" method {"+" Method}]
+ [encoding
+ ["[0]" signed]]
[constant
- ["[1][0]" arity]]
- [variable
- ["[1][0]" foreign]
- ["[1][0]" partial]]]
- ["/[1]" // "_"
- ["[1][0]" type]
- ["[1][0]" reference]
- [////
- [analysis {"+" Environment}]
- [synthesis {"+" Synthesis}]
- [///
- ["[0]" arity {"+" Arity}]
- [reference
- [variable {"+" Register}]]]]]]])
+ [pool {"+" Resource}]]
+ ["[0]" type {"+" Type}
+ ["[0]" category {"+" Class Value}]]]]]]
+ ["[0]" //
+ ["[1][0]" implementation]
+ ["/[1]" // "_"
+ ["[1][0]" abstract]
+ [field
+ [constant
+ ["[1][0]" arity]]
+ [variable
+ ["[1][0]" foreign]
+ ["[1][0]" partial]]]
+ ["/[1]" // "_"
+ ["[1][0]" type]
+ ["[1][0]" reference]
+ [////
+ [analysis {"+" Environment}]
+ [synthesis {"+" Synthesis}]
+ [///
+ ["[0]" arity {"+" Arity}]
+ [reference
+ [variable {"+" Register}]]]]]]])
(def: .public name "<init>")
@@ -49,7 +50,8 @@
(def: .public (type environment arity)
(-> (Environment Synthesis) Arity (Type category.Method))
- (type.method [(list#composite (///foreign.closure environment)
+ (type.method [(list)
+ (list#composite (///foreign.closure environment)
(if (arity.multiary? arity)
(list& ///arity.type (..partials arity))
(list)))
@@ -57,8 +59,8 @@
(list)]))
(def: no_partials
- (|> 0
- unsigned.u1
+ (|> +0
+ signed.s1
try.trusted
_.bipush))
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/jvm/function/method/new.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/jvm/function/method/new.lux
index 5c059f5a7..5c03b472b 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/jvm/function/method/new.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/jvm/function/method/new.lux
@@ -1,46 +1,47 @@
(.using
- [library
- [lux {"-" Type type}
- [abstract
- ["[0]" monad {"+" do}]]
- [data
- [number
- ["n" nat]]
- [collection
- ["[0]" list]]]
- [target
- [jvm
- ["[0]" field {"+" Field}]
- ["[0]" method {"+" Method}]
- ["_" bytecode {"+" Bytecode}]
- ["[0]" constant
- [pool {"+" Resource}]]
- [type {"+" Type}
- ["[0]" category {"+" Class Value Return}]]]]
- [tool
- [compiler
- [meta
- ["[0]" archive {"+" Archive}]]]]]]
- ["[0]" //
- ["[1][0]" init]
- ["[1][0]" implementation]
+ [library
+ [lux {"-" Type type}
+ [abstract
+ ["[0]" monad {"+" do}]]
+ [data
+ [collection
+ ["[0]" list]]]
+ [math
+ [number
+ ["n" nat]]]
+ [target
+ [jvm
+ ["[0]" field {"+" Field}]
+ ["[0]" method {"+" Method}]
+ ["_" bytecode {"+" Bytecode}]
+ ["[0]" constant
+ [pool {"+" Resource}]]
+ [type {"+" Type}
+ ["[0]" category {"+" Class Value Return}]]]]
+ [tool
+ [compiler
+ [meta
+ ["[0]" archive {"+" Archive}]]]]]]
+ ["[0]" //
+ ["[1][0]" init]
+ ["[1][0]" implementation]
+ ["/[1]" // "_"
+ [field
+ [constant
+ ["[1][0]" arity]]
+ [variable
+ ["[1][0]" foreign]
+ ["[1][0]" partial]]]
["/[1]" // "_"
- [field
- [constant
- ["[1][0]" arity]]
- [variable
- ["[1][0]" foreign]
- ["[1][0]" partial]]]
- ["/[1]" // "_"
- [runtime {"+" Operation Phase}]
- ["[1][0]" value]
- ["[1][0]" reference]
- [////
- [analysis {"+" Environment}]
- [synthesis {"+" Synthesis}]
- [///
- ["[0]" arity {"+" Arity}]
- ["[0]" phase]]]]]])
+ [runtime {"+" Operation Phase}]
+ ["[1][0]" value]
+ ["[1][0]" reference]
+ [////
+ [analysis {"+" Environment}]
+ [synthesis {"+" Synthesis}]
+ [///
+ ["[0]" arity {"+" Arity}]
+ ["[0]" phase]]]]]])
(def: .public (instance' foreign_setup class environment arity)
(-> (List (Bytecode Any)) (Type Class) (Environment Synthesis) Arity (Bytecode Any))
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/jvm/function/method/reset.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/jvm/function/method/reset.lux
index 112f1b0fc..d1a78ce86 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/jvm/function/method/reset.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/jvm/function/method/reset.lux
@@ -30,7 +30,7 @@
(def: .public (type class)
(-> (Type Class) (Type category.Method))
- (type.method [(list) class (list)]))
+ (type.method [(list) (list) class (list)]))
(def: (current_environment class)
(-> (Type Class) (Environment Synthesis) (List (Bytecode Any)))
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/jvm/loop.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/jvm/loop.lux
index 60c42160b..60f6c3b2a 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/jvm/loop.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/jvm/loop.lux
@@ -1,29 +1,30 @@
(.using
- [library
- [lux "*"
- [abstract
- ["[0]" monad {"+" do}]]
- [control
- ["[0]" function]]
- [data
- ["[0]" product]
- [number
- ["n" nat]]
- [collection
- ["[0]" list ("[1]#[0]" functor)]]]
- [target
- [jvm
- ["_" bytecode {"+" Label Bytecode} ("[1]#[0]" monad)]]]]]
- ["[0]" // "_"
- ["[1][0]" runtime {"+" Operation Phase Generator}]
- ["[1][0]" value]
- [////
- ["[0]" synthesis {"+" Path Synthesis}]
- ["[0]" generation]
- [///
- ["[0]" phase]
- [reference
- [variable {"+" Register}]]]]])
+ [library
+ [lux "*"
+ [abstract
+ ["[0]" monad {"+" do}]]
+ [control
+ ["[0]" function]]
+ [data
+ ["[0]" product]
+ [collection
+ ["[0]" list ("[1]#[0]" functor)]]]
+ [math
+ [number
+ ["n" nat]]]
+ [target
+ [jvm
+ ["_" bytecode {"+" Bytecode} ("[1]#[0]" monad)]]]]]
+ ["[0]" // "_"
+ ["[1][0]" runtime {"+" Operation Phase Generator}]
+ ["[1][0]" value]
+ [////
+ ["[0]" synthesis {"+" Path Synthesis}]
+ ["[0]" generation]
+ [///
+ ["[0]" phase]
+ [reference
+ [variable {"+" Register}]]]]])
(def: (invariant? register changeS)
(-> Register Synthesis Bit)
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/jvm/primitive.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/jvm/primitive.lux
index 12bddd14d..44200c2d2 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/jvm/primitive.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/jvm/primitive.lux
@@ -1,17 +1,22 @@
(.using
- [library
- [lux {"-" i64}
- ["[0]" ffi {"+" import:}]
- [abstract
- [monad {"+" do}]]
- [target
- [jvm
- ["_" bytecode {"+" Bytecode}]
- ["[0]" type]
- [encoding
- ["[0]" signed]]]]]]
- ["[0]" // "_"
- ["[1][0]" runtime]])
+ [library
+ [lux {"-" i64}
+ ["[0]" ffi {"+" import:}]
+ [abstract
+ [monad {"+" do}]]
+ [control
+ ["[0]" try]]
+ [math
+ [number
+ ["i" int]]]
+ [target
+ [jvm
+ ["_" bytecode {"+" Bytecode}]
+ ["[0]" type]
+ [encoding
+ ["[0]" signed]]]]]]
+ ["[0]" // "_"
+ ["[1][0]" runtime]])
(def: $Boolean (type.class "java.lang.Boolean" (list)))
(def: $Long (type.class "java.lang.Long" (list)))
@@ -22,7 +27,7 @@
(_.getstatic $Boolean (if value "TRUE" "FALSE") $Boolean))
(def: wrap_i64
- (_.invokestatic $Long "valueOf" (type.method [(list type.long) $Long (list)])))
+ (_.invokestatic $Long "valueOf" (type.method [(list) (list type.long) $Long (list)])))
(def: .public (i64 value)
(-> (I64 Any) (Bytecode Any))
@@ -71,10 +76,15 @@
..wrap_i64)))))
(def: wrap_f64
- (_.invokestatic $Double "valueOf" (type.method [(list type.double) $Double (list)])))
+ (_.invokestatic $Double "valueOf" (type.method [(list) (list type.double) $Double (list)])))
(import: java/lang/Double
- ("static" doubleToRawLongBits "manual" [double] int))
+ ["[1]::[0]"
+ ("static" doubleToRawLongBits "manual" [double] int)])
+
+(def: d0_bits
+ Int
+ (java/lang/Double::doubleToRawLongBits +0.0))
(def: .public (f64 value)
(-> Frac (Bytecode Any))
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/jvm/structure.lux b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/jvm/structure.lux
index f06e89e38..0f0012727 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/jvm/structure.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/phase/generation/jvm/structure.lux
@@ -1,39 +1,42 @@
(.using
- [library
- [lux "*"
- [abstract
- ["[0]" monad {"+" do}]]
- [data
- [number
- ["[0]" i32]]
- [collection
- ["[0]" list]]]
- [target
- [jvm
- ["_" bytecode {"+" Bytecode}]
- ["[0]" type]
- [encoding
- ["[0]" signed]]]]]]
- ["[0]" // "_"
- ["[1][0]" runtime {"+" Operation Phase Generator}]
- ["[1][0]" primitive]
- ["///[1]" //// "_"
- [analysis {"+" Variant Tuple}]
- ["[1][0]" synthesis {"+" Synthesis}]
- [///
- ["[0]" phase]]]])
+ [library
+ [lux {"-" Variant Tuple}
+ [abstract
+ ["[0]" monad {"+" do}]]
+ [control
+ ["[0]" try]]
+ [data
+ [collection
+ ["[0]" list]]]
+ [math
+ [number
+ ["[0]" i32]]]
+ [target
+ [jvm
+ ["_" bytecode {"+" Bytecode}]
+ ["[0]" type]
+ [encoding
+ ["[0]" signed]]]]]]
+ ["[0]" // "_"
+ ["[1][0]" runtime {"+" Operation Phase Generator}]
+ ["[1][0]" primitive]
+ ["///[1]" //// "_"
+ [analysis {"+" Variant Tuple}]
+ ["[1][0]" synthesis {"+" Synthesis}]
+ [///
+ ["[0]" phase]]]])
(def: $Object
(type.class "java.lang.Object" (list)))
-(def: .public (tuple generate archive membersS)
+(def: .public (tuple phase archive membersS)
(Generator (Tuple Synthesis))
(case membersS
{.#End}
(# phase.monad in //runtime.unit)
{.#Item singletonS {.#End}}
- (generate archive singletonS)
+ (phase archive singletonS)
_
(do [! phase.monad]
@@ -41,7 +44,7 @@
list.enumeration
(monad.each ! (function (_ [idx member])
(do !
- [memberI (generate archive member)]
+ [memberI (phase archive member)]
(in (do _.monad
[_ _.dup
_ (_.int (.i64 idx))
@@ -81,15 +84,16 @@
//runtime.right_flag
//runtime.left_flag))
-(def: .public (variant generate archive [lefts right? valueS])
+(def: .public (variant phase archive [lefts right? valueS])
(Generator (Variant Synthesis))
(do phase.monad
- [valueI (generate archive valueS)]
+ [valueI (phase archive valueS)]
(in (do _.monad
[_ (..tag lefts right?)
_ (..flag right?)
_ valueI]
(_.invokestatic //runtime.class "variant"
- (type.method [(list type.int $Object $Object)
+ (type.method [(list)
+ (list type.int $Object $Object)
(type.array $Object)
(list)]))))))
diff --git a/stdlib/source/library/lux/tool/compiler/language/lux/version.lux b/stdlib/source/library/lux/tool/compiler/language/lux/version.lux
index c9ffff258..25f68450d 100644
--- a/stdlib/source/library/lux/tool/compiler/language/lux/version.lux
+++ b/stdlib/source/library/lux/tool/compiler/language/lux/version.lux
@@ -6,4 +6,4 @@
(def: .public version
Version
- 00,06,05)
+ 00,07,00)
diff --git a/stdlib/source/test/lux.lux b/stdlib/source/test/lux.lux
index 7026c0a48..c200a0316 100644
--- a/stdlib/source/test/lux.lux
+++ b/stdlib/source/test/lux.lux
@@ -1,72 +1,71 @@
-(.with_expansions [<target>' (.for ["{old}" (.as_is ["[1]/[0]" jvm])
- "JVM" (.as_is ["[1]/[0]" jvm])]
- (.as_is))
- <target> <target>']
- (.using
- [library
- ["/" lux "*"
- [program {"+" program:}]
- ["_" test {"+" Test}]
- ["@" target]
- [abstract
- [monad {"+" do}]]
- [control
- ["[0]" io]
- ["[0]" maybe ("[1]#[0]" functor)]
- [concurrency
- ["[0]" atom {"+" Atom}]]
- [parser
- ["<[0]>" code]]]
- [data
- ["[0]" product]
- ["[0]" bit ("[1]#[0]" equivalence)]
- ["[0]" text ("[1]#[0]" equivalence)
- ["%" format {"+" format}]]
- [collection
- ["[0]" list ("[1]#[0]" functor)]
- ["[0]" set {"+" Set} ("[1]#[0]" equivalence)]
- [dictionary
- ["[0]" plist]]]]
- ["[0]" macro
- [syntax {"+" syntax:}]
- ["[0]" code ("[1]#[0]" equivalence)]
- ["[0]" template]]
- ["[0]" math
- ["[0]" random ("[1]#[0]" functor)]
- [number
- [i8 {"+"}]
- [i16 {"+"}]
- ["n" nat]
- ["i" int]
- ["r" rev]
- ["f" frac]
- ["[0]" i64]]]
- ["[0]" meta
- ["[0]" location ("[1]#[0]" equivalence)]]]]
- ... TODO: Must have 100% coverage on tests.
- ["[0]" / "_"
- ["[1][0]" abstract]
- ["[1][0]" control]
- ["[1][0]" data]
- ["[1][0]" debug]
- ["[1][0]" documentation]
- ["[1][0]" locale]
- ["[1][0]" macro
- ["[1]/[0]" code]]
- ["[1][0]" math]
- ["[1][0]" meta]
- ["[1][0]" program]
- ["[1][0]" static]
- ["[1][0]" target]
- ["[1][0]" test]
- ["[1][0]" time]
- ... ["[1][0]" tool] ... TODO: Update & expand tests for this
- ["[1][0]" type]
- ["[1][0]" world]
- ["[1][0]" ffi]
- ["[1][0]" extension]
- ["[1][0]" target "_"
- <target>]]))
+(.`` (.`` (.using
+ [library
+ ["/" lux "*"
+ [program {"+" program:}]
+ ["_" test {"+" Test}]
+ ["@" target]
+ [abstract
+ [monad {"+" do}]]
+ [control
+ ["[0]" io]
+ ["[0]" maybe ("[1]#[0]" functor)]
+ [concurrency
+ ["[0]" atom {"+" Atom}]]
+ [parser
+ ["<[0]>" code]]]
+ [data
+ ["[0]" product]
+ ["[0]" bit ("[1]#[0]" equivalence)]
+ ["[0]" text ("[1]#[0]" equivalence)
+ ["%" format {"+" format}]]
+ [collection
+ ["[0]" list ("[1]#[0]" functor)]
+ ["[0]" set {"+" Set} ("[1]#[0]" equivalence)]
+ [dictionary
+ ["[0]" plist]]]]
+ ["[0]" macro
+ [syntax {"+" syntax:}]
+ ["[0]" code ("[1]#[0]" equivalence)]
+ ["[0]" template]]
+ ["[0]" math
+ ["[0]" random ("[1]#[0]" functor)]
+ [number
+ [i8 {"+"}]
+ [i16 {"+"}]
+ ["n" nat]
+ ["i" int]
+ ["r" rev]
+ ["f" frac]
+ ["[0]" i64]]]
+ ["[0]" meta
+ ["[0]" location ("[1]#[0]" equivalence)]]]]
+ ... TODO: Must have 100% coverage on tests.
+ ["[0]" / "_"
+ ["[1][0]" abstract]
+ ["[1][0]" control]
+ ["[1][0]" data]
+ ["[1][0]" debug]
+ ["[1][0]" documentation]
+ ["[1][0]" locale]
+ ["[1][0]" macro
+ ["[1]/[0]" code]]
+ ["[1][0]" math]
+ ["[1][0]" meta]
+ ["[1][0]" program]
+ ["[1][0]" static]
+ ["[1][0]" target]
+ ["[1][0]" test]
+ ["[1][0]" time]
+ ... ["[1][0]" tool] ... TODO: Update & expand tests for this
+ ["[1][0]" type]
+ ["[1][0]" world]
+ ["[1][0]" ffi]
+ ["[1][0]" extension]
+ ["[1][0]" target "_"
+ (~~ (.for ["{old}" (~~ (.as_is ["[1]/[0]" jvm]))
+ "JVM" (~~ (.as_is ["[1]/[0]" jvm]))
+ "JavaScript" (~~ (.as_is ["[1]/[0]" js]))]
+ (~~ (.as_is))))]])))
... TODO: Get rid of this ASAP
(template: (!bundle body)
@@ -79,7 +78,8 @@
Test
(with_expansions [... TODO: Update & expand tests for this
<target> (for [@.jvm (~~ (as_is /target/jvm.test))
- @.old (~~ (as_is /target/jvm.test))]
+ @.old (~~ (as_is /target/jvm.test))
+ @.js (~~ (as_is /target/js.test))]
(~~ (as_is)))
<extension> (for [@.old (~~ (as_is))]
(~~ (as_is /extension.test)))]
@@ -865,12 +865,11 @@
(hide left))
true)))))
(_.cover [/.same?]
- (let [not_left (|> left ++ -- %.nat)
- left (%.nat left)]
- (and (and (/.same? left left)
- (/.same? not_left not_left))
- (and (text#= left not_left)
- (not (/.same? left not_left))))))
+ (let [not_left (atom.atom left)
+ left (atom.atom left)]
+ (and (/.same? left left)
+ (/.same? not_left not_left)
+ (not (/.same? left not_left)))))
(_.cover [/.Rec]
(let [list (: (/.Rec NList
(Maybe [Nat NList]))
diff --git a/stdlib/source/test/lux/math/number/int.lux b/stdlib/source/test/lux/math/number/int.lux
index d67d0d853..394c34c15 100644
--- a/stdlib/source/test/lux/math/number/int.lux
+++ b/stdlib/source/test/lux/math/number/int.lux
@@ -1,27 +1,27 @@
(.using
- [library
- [lux "*"
- ["_" test {"+" Test}]
- [abstract
- [monad {"+" do}]
- [\\specification
- ["$[0]" equivalence]
- ["$[0]" hash]
- ["$[0]" order]
- ["$[0]" enum]
- ["$[0]" interval]
- ["$[0]" monoid]
- ["$[0]" codec]]]
- [data
- ["[0]" bit ("[1]#[0]" equivalence)]]
- [math
- ["[0]" random {"+" Random}]]]]
- [\\library
- ["[0]" /
- [//
- ["n" nat]
- ["f" frac]
- ["[0]" i64]]]])
+ [library
+ [lux "*"
+ ["_" test {"+" Test}]
+ [abstract
+ [monad {"+" do}]
+ [\\specification
+ ["$[0]" equivalence]
+ ["$[0]" hash]
+ ["$[0]" order]
+ ["$[0]" enum]
+ ["$[0]" interval]
+ ["$[0]" monoid]
+ ["$[0]" codec]]]
+ [data
+ ["[0]" bit ("[1]#[0]" equivalence)]]
+ [math
+ ["[0]" random {"+" Random}]]]]
+ [\\library
+ ["[0]" /
+ [//
+ ["n" nat]
+ ["f" frac]
+ ["[0]" i64]]]])
(def: signature
Test
@@ -193,7 +193,8 @@
(/.= pattern (/.right_shifted i64.width pattern))
sign_mask (i64.left_shifted (-- i64.width) 1)
- mantissa_mask (i64.not sign_mask)
+ mantissa_mask (-- (i64.left_shifted (n.- idx i64.width) 1))
+ co_mantissa_mask (i64.not mantissa_mask)
sign_preservation!
(/.= (i64.and sign_mask pattern)
@@ -201,11 +202,21 @@
mantissa_parity!
(/.= (i64.and mantissa_mask (i64.right_shifted idx pattern))
- (i64.and mantissa_mask (/.right_shifted idx pattern)))]
+ (i64.and mantissa_mask (/.right_shifted idx pattern)))
+
+ co_mantissa_disparity!
+ (or (n.= 0 idx)
+ (and (/.= +0 (i64.and co_mantissa_mask (i64.right_shifted idx pattern)))
+ (/.= (if (/.< +0 pattern)
+ (.int co_mantissa_mask)
+ +0)
+ (i64.and co_mantissa_mask (/.right_shifted idx pattern)))))]
(and nullity!
idempotency!
sign_preservation!
- mantissa_parity!))))
+ mantissa_parity!
+ co_mantissa_disparity!
+ ))))
..predicate
..signature
diff --git a/stdlib/source/test/lux/target/js.lux b/stdlib/source/test/lux/target/js.lux
new file mode 100644
index 000000000..cc60dd896
--- /dev/null
+++ b/stdlib/source/test/lux/target/js.lux
@@ -0,0 +1,845 @@
+(.using
+ [library
+ [lux "*"
+ ["_" test {"+" Test}]
+ ["[0]" static]
+ [abstract
+ [monad {"+" do}]
+ ["[0]" predicate]]
+ [control
+ [pipe {"+" case>}]
+ ["[0]" function]
+ ["[0]" maybe ("[1]#[0]" functor)]
+ ["[0]" try {"+" Try} ("[1]#[0]" functor)]]
+ [data
+ ["[0]" bit ("[1]#[0]" equivalence)]
+ ["[0]" text {"+" \n} ("[1]#[0]" equivalence)
+ ["%" format {"+" format}]]
+ [collection
+ ["[0]" list ("[1]#[0]" functor)]]]
+ [macro
+ ["[0]" template]]
+ [math
+ ["[0]" random {"+" Random} ("[1]#[0]" monad)]
+ [number
+ ["n" nat]
+ ["i" int]
+ ["f" frac]
+ ["[0]" i64]]]]]
+ [\\library
+ ["[0]" /]])
+
+(def: (eval code)
+ (-> /.Expression (Try (Maybe Any)))
+ ... Note: I have to call "eval" this way
+ ... in order to avoid a quirk of calling eval in Node
+ ... when the code is running under "use strict";.
+ (try (let [return ("js apply" (function.identity ("js constant" "eval")) (/.code code))]
+ (if ("js object null?" return)
+ {.#None}
+ {.#Some return}))))
+
+(def: (expression ??? it)
+ (-> (-> Any Bit) /.Expression Bit)
+ (|> it
+ ..eval
+ (try#each (|>> (maybe#each ???)
+ (maybe.else false)))
+ (try.else false)))
+
+(template [<range>]
+ [(`` (def: (~~ (template.symbol ["as_int/" <range>]))
+ (-> Int Int)
+ (|>> (i64.and (static.nat (-- (i64.left_shifted <range> 1)))))))
+ (`` (def: (~~ (template.symbol ["int/" <range>]))
+ (Random Int)
+ (do [! random.monad]
+ [negative? random.bit
+ mantissa (# ! each (|>> (i64.and (static.nat (-- (i64.left_shifted (-- <range>) 1))))
+ .int)
+ random.nat)]
+ (in (if negative?
+ (i.* -1 mantissa)
+ mantissa)))))]
+
+ [16]
+ [32]
+ )
+
+(def: test|literal
+ Test
+ (do [! random.monad]
+ [boolean random.bit
+ number random.frac
+ int ..int/32
+ string (random.ascii/upper 5)]
+ ($_ _.and
+ (_.cover [/.null]
+ (|> /.null
+ ..eval
+ (try#each (function (_ it)
+ (case it
+ {.#None} true
+ {.#Some _} true)))
+ (try.else false)))
+ (_.cover [/.boolean]
+ (expression (|>> (:as Bit) (bit#= boolean))
+ (/.boolean boolean)))
+ (_.cover [/.number]
+ (expression (|>> (:as Frac) (f.= number))
+ (/.number number)))
+ (_.cover [/.int]
+ (expression (|>> (:as Frac) f.int (i.= int))
+ (/.int int)))
+ (_.cover [/.string]
+ (expression (|>> (:as Text) (text#= string))
+ (/.string string)))
+ )))
+
+(def: test|boolean
+ Test
+ (do [! random.monad]
+ [left random.bit
+ right random.bit]
+ (`` ($_ _.and
+ (~~ (template [<js> <lux>]
+ [(_.cover [<js>]
+ (let [expected (<lux> left right)]
+ (expression (|>> (:as Bit) (bit#= expected))
+ (<js> (/.boolean left) (/.boolean right)))))]
+
+ [/.or .or]
+ [/.and .and]
+ ))
+ (_.cover [/.not]
+ (expression (|>> (:as Bit) (bit#= (not left)))
+ (/.not (/.boolean left))))
+ ))))
+
+(def: test|number
+ Test
+ (do [! random.monad]
+ [parameter (random.only (|>> (f.= +0.0) not)
+ random.safe_frac)
+ subject random.safe_frac]
+ (`` ($_ _.and
+ (~~ (template [<js> <lux>]
+ [(_.cover [<js>]
+ (let [expected (<lux> parameter subject)]
+ (expression (|>> (:as Frac) (f.= expected))
+ (<js> (/.number parameter) (/.number subject)))))]
+
+ [/.+ f.+]
+ [/.- f.-]
+ [/.* f.*]
+ [/./ f./]
+ [/.% f.%]
+ ))
+ (~~ (template [<js> <lux>]
+ [(_.cover [<js>]
+ (let [expected (<lux> parameter subject)]
+ (expression (|>> (:as Bit) (bit#= expected))
+ (<js> (/.number parameter) (/.number subject)))))]
+
+ [/.< f.<]
+ [/.<= f.<=]
+ [/.> f.>]
+ [/.>= f.>=]
+ [/.= f.=]
+ ))
+ ))))
+
+(def: test|i32
+ Test
+ (do [! random.monad]
+ [left ..int/32
+ right ..int/32
+
+ i32 ..int/32
+ i16 ..int/16
+ shift (# ! each (n.% 16) random.nat)]
+ (`` ($_ _.and
+ (~~ (template [<js> <lux>]
+ [(_.cover [<js>]
+ (let [expected (<lux> left right)]
+ (expression (|>> (:as Frac) f.int (i.= expected))
+ (<js> (/.int left) (/.int right)))))]
+
+ [/.bit_or i64.or]
+ [/.bit_xor i64.xor]
+ [/.bit_and i64.and]
+ ))
+ (_.cover [/.opposite]
+ (expression (|>> (:as Frac) f.int (i.= (i.* -1 i32)))
+ (/.opposite (/.i32 i32))))
+
+ (_.cover [/.i32]
+ (expression (|>> (:as Frac) f.int (i.= i32))
+ (/.i32 i32)))
+ (_.cover [/.to_i32]
+ (expression (|>> (:as Frac) f.int (i.= i32))
+ (/.to_i32 (/.int i32))))
+ (_.cover [/.left_shift]
+ (let [expected (i64.left_shifted shift i16)]
+ (expression (|>> (:as Frac) f.int (i.= expected))
+ (/.left_shift (/.int (.int shift))
+ (/.i32 i16)))))
+ (_.cover [/.logic_right_shift]
+ (let [expected (i64.right_shifted shift (as_int/32 i16))]
+ (expression (|>> (:as Frac) f.int (i.= expected))
+ (/.logic_right_shift (/.int (.int shift))
+ (/.i32 i16)))))
+ (_.cover [/.arithmetic_right_shift]
+ (let [expected (i.right_shifted shift i16)]
+ (expression (|>> (:as Frac) f.int (i.= expected))
+ (/.arithmetic_right_shift (/.int (.int shift))
+ (/.i32 i16)))))
+ (_.cover [/.bit_not]
+ (let [expected (if (i.< +0 i32)
+ (as_int/32 (i64.not i32))
+ (i64.not (as_int/32 i32)))]
+ (expression (|>> (:as Frac) f.int (i.= expected))
+ (/.bit_not (/.i32 i32)))))
+ ))))
+
+(def: test|array
+ Test
+ (do [! random.monad]
+ [size (# ! each (|>> (n.% 10) ++) random.nat)
+ index (# ! each (n.% size) random.nat)
+ items (random.list size random.safe_frac)
+ .let [expected (|> items
+ (list.item index)
+ (maybe.else f.not_a_number))]]
+ ($_ _.and
+ (_.cover [/.array /.at]
+ (and (expression (|>> (:as Frac) (f.= expected))
+ (/.at (/.int (.int index))
+ (/.array (list#each /.number items))))
+ (expression (|>> (:as Bit))
+ (|> (/.array (list#each /.number items))
+ (/.at (/.int (.int size)))
+ (/.= /.undefined)))))
+ )))
+
+(def: test|object
+ Test
+ (do [! random.monad]
+ [expected random.safe_frac
+ field (random.ascii/upper 5)
+ dummy (random.only (|>> (text#= field) not)
+ (random.ascii/upper 5))
+
+ size (# ! each (|>> (n.% 10) ++) random.nat)
+ index (# ! each (n.% size) random.nat)
+ items (random.list size random.safe_frac)]
+ ($_ _.and
+ (_.cover [/.object /.the]
+ (expression (|>> (:as Frac) (f.= expected))
+ (/.the field (/.object (list [field (/.number expected)])))))
+ (let [expected (|> items
+ (list.item index)
+ (maybe.else f.not_a_number))]
+ (_.cover [/.do]
+ (expression (|>> (:as Frac) f.int (i.= (.int index)))
+ (|> (/.array (list#each /.number items))
+ (/.do "lastIndexOf" (list (/.number expected)))))))
+ (_.cover [/.undefined]
+ (expression (|>> (:as Bit))
+ (|> (/.object (list [field (/.number expected)]))
+ (/.the dummy)
+ (/.= /.undefined))))
+ )))
+
+(def: test|computation
+ Test
+ (do [! random.monad]
+ [test random.bit
+ then random.safe_frac
+ else random.safe_frac
+
+ boolean random.bit
+ number random.frac
+ string (random.ascii/upper 5)
+
+ comment (random.ascii/upper 10)]
+ ($_ _.and
+ ..test|boolean
+ ..test|number
+ ..test|i32
+ ..test|array
+ ..test|object
+ (_.cover [/.?]
+ (let [expected (if test then else)]
+ (expression (|>> (:as Frac) (f.= expected))
+ (/.? (/.boolean test)
+ (/.number then)
+ (/.number else)))))
+ (_.cover [/.not_a_number?]
+ (and (expression (|>> (:as Bit))
+ (/.not_a_number? (/.number f.not_a_number)))
+ (expression (|>> (:as Bit) not)
+ (/.not_a_number? (/.number then)))))
+ (_.cover [/.type_of]
+ (and (expression (|>> (:as Text) (text#= "boolean"))
+ (/.type_of (/.boolean boolean)))
+ (expression (|>> (:as Text) (text#= "number"))
+ (/.type_of (/.number number)))
+ (expression (|>> (:as Text) (text#= "string"))
+ (/.type_of (/.string string)))
+ (expression (|>> (:as Text) (text#= "object"))
+ (/.type_of /.null))
+ (expression (|>> (:as Text) (text#= "object"))
+ (/.type_of (/.object (list [string (/.number number)]))))
+ (expression (|>> (:as Text) (text#= "object"))
+ (/.type_of (/.array (list (/.boolean boolean)
+ (/.number number)
+ (/.string string)))))
+ (expression (|>> (:as Text) (text#= "undefined"))
+ (/.type_of /.undefined))))
+ (_.cover [/.comment]
+ (expression (|>> (:as Frac) (f.= then))
+ (/.comment comment
+ (/.number then))))
+ )))
+
+(def: test|expression
+ Test
+ (do [! random.monad]
+ [dummy random.safe_frac
+ expected random.safe_frac]
+ (`` ($_ _.and
+ (_.for [/.Literal]
+ ..test|literal)
+ (_.for [/.Computation]
+ ..test|computation)
+ (_.cover [/.,]
+ (expression (|>> (:as Frac) (f.= expected))
+ (/., (/.number dummy) (/.number expected))))
+ ))))
+
+(def: test/var
+ Test
+ (do [! random.monad]
+ [number/0 random.safe_frac
+ number/1 random.safe_frac
+ number/2 random.safe_frac
+ foreign (random.ascii/lower 10)
+ local (random.only (|>> (text#= foreign) not)
+ (random.ascii/lower 10))
+ .let [$foreign (/.var foreign)
+ $local (/.var local)]]
+ ($_ _.and
+ (_.cover [/.var]
+ (expression (|>> (:as Frac) (f.= number/0))
+ (/.apply/* (/.closure (list $foreign) (/.return $foreign))
+ (list (/.number number/0)))))
+ (_.cover [/.define]
+ (expression (|>> (:as Frac) (f.= number/1))
+ (/.apply/* (/.closure (list $foreign)
+ ($_ /.then
+ (/.define $local (/.number number/1))
+ (/.return $local)))
+ (list (/.number number/0)))))
+ (_.cover [/.declare]
+ (expression (|>> (:as Frac) (f.= number/1))
+ (/.apply/* (/.closure (list $foreign)
+ ($_ /.then
+ (/.declare $local)
+ (/.set $local (/.number number/1))
+ (/.return $local)))
+ (list (/.number number/0)))))
+ )))
+
+(def: test/location
+ Test
+ (do [! random.monad]
+ [number/0 random.safe_frac
+ int/0 ..int/16
+ $foreign (# ! each /.var (random.ascii/lower 10))
+ field (random.ascii/upper 10)]
+ ($_ _.and
+ (_.cover [/.set]
+ (and (expression (|>> (:as Frac) (f.= (f.+ number/0 number/0)))
+ (/.apply/* (/.closure (list $foreign)
+ ($_ /.then
+ (/.set $foreign (/.+ $foreign $foreign))
+ (/.return $foreign)))
+ (list (/.number number/0))))
+ (expression (|>> (:as Frac) (f.= (f.+ number/0 number/0)))
+ (let [@ (/.at (/.int +0) $foreign)]
+ (/.apply/* (/.closure (list $foreign)
+ ($_ /.then
+ (/.set $foreign (/.array (list $foreign)))
+ (/.set @ (/.+ @ @))
+ (/.return @)))
+ (list (/.number number/0)))))
+ (expression (|>> (:as Frac) (f.= (f.+ number/0 number/0)))
+ (let [@ (/.the field $foreign)]
+ (/.apply/* (/.closure (list $foreign)
+ ($_ /.then
+ (/.set $foreign (/.object (list [field $foreign])))
+ (/.set @ (/.+ @ @))
+ (/.return @)))
+ (list (/.number number/0)))))))
+ (_.cover [/.delete]
+ (and (and (expression (|>> (:as Bit))
+ (/.apply/* (/.closure (list)
+ ($_ /.then
+ (/.set $foreign (/.number number/0))
+ (/.return (/.delete $foreign))))
+ (list)))
+ (expression (|>> (:as Bit) not)
+ (/.apply/* (/.closure (list $foreign)
+ (/.return (/.delete $foreign)))
+ (list (/.number number/0)))))
+ (expression (|>> (:as Bit))
+ (let [@ (/.at (/.int +0) $foreign)]
+ (/.apply/* (/.closure (list $foreign)
+ ($_ /.then
+ (/.set $foreign (/.array (list $foreign)))
+ (/.return (|> (/.= (/.boolean true) (/.delete @))
+ (/.and (/.= /.undefined @))))))
+ (list (/.number number/0)))))
+ (expression (|>> (:as Bit))
+ (let [@ (/.the field $foreign)]
+ (/.apply/* (/.closure (list $foreign)
+ ($_ /.then
+ (/.set $foreign (/.object (list [field $foreign])))
+ (/.return (|> (/.= (/.boolean true) (/.delete @))
+ (/.and (/.= /.undefined @))))))
+ (list (/.number number/0)))))
+ ))
+ (_.cover [/.Access]
+ (`` (and (~~ (template [<js> <lux>]
+ [(expression (|>> (:as Frac) f.int (i.= (<lux> int/0)))
+ (/.apply/* (/.closure (list $foreign)
+ ($_ /.then
+ (/.statement (<js> $foreign))
+ (/.return $foreign)))
+ (list (/.int int/0))))
+ (expression (|>> (:as Frac) f.int (i.= (<lux> int/0)))
+ (let [@ (/.at (/.int +0) $foreign)]
+ (/.apply/* (/.closure (list $foreign)
+ ($_ /.then
+ (/.set $foreign (/.array (list $foreign)))
+ (/.statement (<js> @))
+ (/.return @)))
+ (list (/.int int/0)))))
+ (expression (|>> (:as Frac) f.int (i.= (<lux> int/0)))
+ (let [@ (/.the field $foreign)]
+ (/.apply/* (/.closure (list $foreign)
+ ($_ /.then
+ (/.set $foreign (/.object (list [field $foreign])))
+ (/.statement (<js> @))
+ (/.return @)))
+ (list (/.int int/0)))))]
+
+ [/.++ .++]
+ [/.-- .--]
+ )))))
+ (_.for [/.Var]
+ ..test/var)
+ )))
+
+(def: test|label
+ Test
+ (do [! random.monad]
+ [input ..int/16
+
+ full_inner_iterations (# ! each (|>> (n.% 20) ++) random.nat)
+ expected_inner_iterations (# ! each (n.% full_inner_iterations) random.nat)
+
+ @outer (# ! each /.label (random.ascii/upper 5))
+ full_outer_iterations (# ! each (|>> (n.% 10) ++) random.nat)
+ expected_outer_iterations (# ! each (n.% full_outer_iterations) random.nat)
+
+ .let [$input (/.var "input")
+ $output (/.var "output")
+ $inner_index (/.var "inner_index")
+ $outer_index (/.var "outer_index")]]
+ ($_ _.and
+ (_.cover [/.break]
+ (let [expected (i.* (.int expected_inner_iterations) input)]
+ (expression (|>> (:as Frac) f.int (i.= expected))
+ (/.apply/* (/.closure (list $input)
+ ($_ /.then
+ (/.define $inner_index (/.int +0))
+ (/.define $output (/.int +0))
+ (/.while (/.< (/.int (.int full_inner_iterations)) $inner_index)
+ ($_ /.then
+ (/.when (/.= (/.int (.int expected_inner_iterations)) $inner_index)
+ /.break)
+ (/.set $output (/.+ $input $output))
+ (/.set $inner_index (/.+ (/.int +1) $inner_index))
+ ))
+ (/.return $output)))
+ (list (/.int input))))))
+ (_.cover [/.continue]
+ (let [expected (i.* (.int (n.- expected_inner_iterations full_inner_iterations)) input)]
+ (expression (|>> (:as Frac) f.int (i.= expected))
+ (/.apply/* (/.closure (list $input)
+ ($_ /.then
+ (/.define $inner_index (/.int +0))
+ (/.define $output (/.int +0))
+ (/.while (/.< (/.int (.int full_inner_iterations)) $inner_index)
+ ($_ /.then
+ (/.set $inner_index (/.+ (/.int +1) $inner_index))
+ (/.when (/.<= (/.int (.int expected_inner_iterations)) $inner_index)
+ /.continue)
+ (/.set $output (/.+ $input $output))
+ ))
+ (/.return $output)))
+ (list (/.int input))))))
+ (_.for [/.label /.with_label]
+ ($_ _.and
+ (_.cover [/.break_at]
+ (let [expected (i.* (.int (n.* expected_outer_iterations
+ expected_inner_iterations))
+ input)]
+ (expression (|>> (:as Frac) f.int (i.= expected))
+ (/.apply/* (/.closure (list $input)
+ ($_ /.then
+ (/.define $output (/.int +0))
+ (/.define $outer_index (/.int +0))
+ (/.with_label @outer
+ (/.while (/.< (/.int (.int full_outer_iterations)) $outer_index)
+ ($_ /.then
+ (/.define $inner_index (/.int +0))
+ (/.while (/.< (/.int (.int full_inner_iterations)) $inner_index)
+ ($_ /.then
+ (/.when (/.= (/.int (.int expected_outer_iterations)) $outer_index)
+ (/.break_at @outer))
+ (/.when (/.= (/.int (.int expected_inner_iterations)) $inner_index)
+ /.break)
+ (/.set $output (/.+ $input $output))
+ (/.set $inner_index (/.+ (/.int +1) $inner_index))
+ ))
+ (/.set $outer_index (/.+ (/.int +1) $outer_index))
+ )))
+ (/.return $output)))
+ (list (/.int input))))))
+ (_.cover [/.continue_at]
+ (let [expected (i.* (.int (n.* (n.- expected_outer_iterations full_outer_iterations)
+ (n.- expected_inner_iterations full_inner_iterations)))
+ input)]
+ (expression (|>> (:as Frac) f.int (i.= expected))
+ (/.apply/* (/.closure (list $input)
+ ($_ /.then
+ (/.define $output (/.int +0))
+ (/.define $outer_index (/.int +0))
+ (/.with_label @outer
+ (/.while (/.< (/.int (.int full_outer_iterations)) $outer_index)
+ ($_ /.then
+ (/.set $outer_index (/.+ (/.int +1) $outer_index))
+ (/.define $inner_index (/.int +0))
+ (/.while (/.< (/.int (.int full_inner_iterations)) $inner_index)
+ ($_ /.then
+ (/.set $inner_index (/.+ (/.int +1) $inner_index))
+ (/.when (/.<= (/.int (.int expected_outer_iterations)) $outer_index)
+ (/.continue_at @outer))
+ (/.when (/.<= (/.int (.int expected_inner_iterations)) $inner_index)
+ /.continue)
+ (/.set $output (/.+ $input $output))
+ ))
+ )
+ ))
+ (/.return $output)))
+ (list (/.int input))))))
+ ))
+ )))
+
+(def: test|loop
+ Test
+ (do [! random.monad]
+ [input ..int/16
+ iterations (# ! each (n.% 10) random.nat)
+ .let [$input (/.var "input")
+ $output (/.var "output")
+ $index (/.var "index")
+ expected|while (i.* (.int iterations) input)
+ expected|do_while (i.* (.int (n.max 1 iterations)) input)]]
+ ($_ _.and
+ (_.cover [/.while]
+ (expression (|>> (:as Frac) f.int (i.= expected|while))
+ (/.apply/* (/.closure (list $input)
+ ($_ /.then
+ (/.define $index (/.int +0))
+ (/.define $output (/.int +0))
+ (/.while (/.< (/.int (.int iterations)) $index)
+ ($_ /.then
+ (/.set $output (/.+ $input $output))
+ (/.set $index (/.+ (/.int +1) $index))
+ ))
+ (/.return $output)))
+ (list (/.int input)))))
+ (_.cover [/.do_while]
+ (expression (|>> (:as Frac) f.int (i.= expected|do_while))
+ (/.apply/* (/.closure (list $input)
+ ($_ /.then
+ (/.define $index (/.int +0))
+ (/.define $output (/.int +0))
+ (/.do_while (/.< (/.int (.int iterations)) $index)
+ ($_ /.then
+ (/.set $output (/.+ $input $output))
+ (/.set $index (/.+ (/.int +1) $index))
+ ))
+ (/.return $output)))
+ (list (/.int input)))))
+ (_.cover [/.for]
+ (expression (|>> (:as Frac) f.int (i.= expected|while))
+ (/.apply/* (/.closure (list $input)
+ ($_ /.then
+ (/.define $output (/.int +0))
+ (/.for $index (/.int +0)
+ (/.< (/.int (.int iterations)) $index)
+ (/.++ $index)
+ (/.set $output (/.+ $input $output)))
+ (/.return $output)))
+ (list (/.int input)))))
+ (_.for [/.Label]
+ ..test|label)
+ )))
+
+(def: test|exception
+ Test
+ (do [! random.monad]
+ [expected random.safe_frac
+ dummy (random.only (|>> (f.= expected) not)
+ random.safe_frac)
+ $ex (# ! each /.var (random.ascii/lower 10))]
+ ($_ _.and
+ (_.cover [/.try]
+ (expression (|>> (:as Frac) (f.= expected))
+ (/.apply/* (/.closure (list)
+ (/.try (/.return (/.number expected))
+ [$ex (/.return (/.number dummy))]))
+ (list))))
+ (_.cover [/.throw]
+ (expression (|>> (:as Frac) (f.= expected))
+ (/.apply/* (/.closure (list)
+ (/.try ($_ /.then
+ (/.throw (/.number expected))
+ (/.return (/.number dummy)))
+ [$ex (/.return $ex)]))
+ (list))))
+ )))
+
+(def: test|apply
+ Test
+ (do [! random.monad]
+ [number/0 random.safe_frac
+ number/1 random.safe_frac
+ number/2 random.safe_frac
+ $arg/0 (# ! each /.var (random.ascii/lower 10))
+ $arg/1 (# ! each /.var (random.ascii/lower 11))
+ $arg/2 (# ! each /.var (random.ascii/lower 12))]
+ (`` ($_ _.and
+ (_.cover [/.apply/1]
+ (expression (|>> (:as Frac) (f.= number/0))
+ (/.apply/1 (/.closure (list $arg/0) (/.return $arg/0))
+ (/.number number/0))))
+ (_.cover [/.apply/2]
+ (expression (|>> (:as Frac) (f.= ($_ f.+ number/0 number/1)))
+ (/.apply/2 (/.closure (list $arg/0 $arg/1) (/.return ($_ /.+ $arg/0 $arg/1)))
+ (/.number number/0)
+ (/.number number/1))))
+ (_.cover [/.apply/3]
+ (expression (|>> (:as Frac) (f.= ($_ f.+ number/0 number/1 number/2)))
+ (/.apply/3 (/.closure (list $arg/0 $arg/1 $arg/2) (/.return ($_ /.+ $arg/0 $arg/1 $arg/2)))
+ (/.number number/0)
+ (/.number number/1)
+ (/.number number/2))))
+ (_.cover [/.apply/*]
+ (expression (|>> (:as Frac) (f.= ($_ f.+ number/0 number/1 number/2)))
+ (/.apply/* (/.closure (list $arg/0 $arg/1 $arg/2) (/.return ($_ /.+ $arg/0 $arg/1 $arg/2)))
+ (list (/.number number/0)
+ (/.number number/1)
+ (/.number number/2)))))
+ ))))
+
+(def: test|function
+ Test
+ (do [! random.monad]
+ [number/0 random.safe_frac
+ iterations (# ! each (n.% 10) random.nat)
+ $self (# ! each /.var (random.ascii/lower 1))
+ $arg/0 (# ! each /.var (random.ascii/lower 2))
+ field (random.ascii/lower 3)
+ $class (# ! each /.var (random.ascii/upper 4))]
+ ($_ _.and
+ (_.cover [/.closure /.return]
+ (expression (|>> (:as Frac) (f.= number/0))
+ (/.apply/* (/.closure (list) (/.return (/.number number/0)))
+ (list))))
+ (_.cover [/.function]
+ (expression (|>> (:as Frac) f.nat (n.= iterations))
+ (/.apply/1 (/.function $self (list $arg/0)
+ (/.return (/.? (/.< (/.int (.int iterations)) $arg/0)
+ (/.apply/1 $self (/.+ (/.int +1) $arg/0))
+ $arg/0)))
+ (/.int +0))))
+ (_.cover [/.function!]
+ (expression (|>> (:as Frac) f.nat (n.= iterations))
+ (/.apply/* (/.closure (list)
+ ($_ /.then
+ (/.function! $self (list $arg/0)
+ (/.return (/.? (/.< (/.int (.int iterations)) $arg/0)
+ (/.apply/1 $self (/.+ (/.int +1) $arg/0))
+ $arg/0)))
+ (/.return (/.apply/1 $self (/.int +0)))))
+ (list))))
+ (_.cover [/.new]
+ (let [$this (/.var "this")]
+ (expression (|>> (:as Frac) (f.= number/0))
+ (/.apply/1 (/.closure (list $arg/0)
+ ($_ /.then
+ (/.function! $class (list)
+ (/.set (/.the field $this) $arg/0))
+ (/.return (/.the field (/.new $class (list))))))
+ (/.number number/0)))))
+ ..test|apply
+ )))
+
+(def: test|branching
+ Test
+ (do [! random.monad]
+ [number/0 random.safe_frac
+ number/1 random.safe_frac
+ number/2 random.safe_frac
+ arg/0 (random.ascii/lower 10)
+ arg/1 (random.only (|>> (text#= arg/0) not)
+ (random.ascii/lower 10))
+ arg/2 (random.only (predicate.and (|>> (text#= arg/0) not)
+ (|>> (text#= arg/1) not))
+ (random.ascii/lower 10))
+ .let [$arg/0 (/.var arg/0)
+ $arg/1 (/.var arg/1)
+ $arg/2 (/.var arg/2)]
+ ??? random.bit
+ int ..int/16]
+ ($_ _.and
+ (_.cover [/.if]
+ (expression (|>> (:as Frac) (f.= (if ??? number/0 number/1)))
+ (/.apply/* (/.closure (list)
+ (/.if (/.boolean ???)
+ (/.return (/.number number/0))
+ (/.return (/.number number/1))))
+ (list))))
+ (_.cover [/.when]
+ (expression (|>> (:as Frac) (f.= (if ??? number/0 number/1)))
+ (/.apply/* (/.closure (list)
+ ($_ /.then
+ (/.when (/.boolean ???)
+ (/.return (/.number number/0)))
+ (/.return (/.number number/1))))
+ (list))))
+ (_.cover [/.switch]
+ (let [number/0' (%.frac number/0)
+ number/1' (%.frac number/1)
+ number/2' (%.frac number/2)]
+ (and (expression (|>> (:as Text) (text#= number/0'))
+ (/.apply/* (/.closure (list)
+ (/.switch (/.number number/0)
+ (list [(list (/.number number/0)) (/.return (/.string number/0'))]
+ [(list (/.number number/1)) (/.return (/.string number/1'))])
+ {.#None}))
+ (list)))
+ (expression (|>> (:as Text) (text#= number/1'))
+ (/.apply/* (/.closure (list)
+ (/.switch (/.number number/1)
+ (list [(list (/.number number/0)) (/.return (/.string number/0'))]
+ [(list (/.number number/1)) (/.return (/.string number/1'))])
+ {.#Some (/.return (/.string number/2'))}))
+ (list)))
+ (expression (|>> (:as Text) (text#= number/2'))
+ (/.apply/* (/.closure (list)
+ (/.switch (/.number number/2)
+ (list [(list (/.number number/0)) (/.return (/.string number/0'))]
+ [(list (/.number number/1)) (/.return (/.string number/1'))])
+ {.#Some (/.return (/.string number/2'))}))
+ (list)))
+ )))
+ )))
+
+(def: test|statement
+ Test
+ (do [! random.monad]
+ [number/0 random.safe_frac
+ number/1 random.safe_frac
+ number/2 random.safe_frac
+ $arg/0 (# ! each /.var (random.ascii/lower 10))
+ $arg/1 (# ! each /.var (random.ascii/lower 11))
+ $arg/2 (# ! each /.var (random.ascii/lower 12))
+ ??? random.bit
+ int ..int/16]
+ (`` ($_ _.and
+ (_.cover [/.statement]
+ (expression (|>> (:as Frac) (f.= number/0))
+ (/.apply/1 (/.closure (list $arg/0)
+ ($_ /.then
+ (/.statement (/.+ $arg/0 $arg/0))
+ (/.return $arg/0)))
+ (/.number number/0))))
+ (~~ (template [<js> <lux>]
+ [(_.cover [<js>]
+ (expression (|>> (:as Frac) f.int (i.= (<lux> int)))
+ (/.apply/1 (/.closure (list $arg/0)
+ (/.return (/., (<js> $arg/0)
+ $arg/0)))
+ (/.int int))))]
+
+ [/.++ .++]
+ [/.-- .--]
+ ))
+ (_.cover [/.then]
+ (expression (|>> (:as Frac) (f.= number/0))
+ (/.apply/2 (/.closure (list $arg/0 $arg/1)
+ ($_ /.then
+ (/.return $arg/0)
+ (/.return $arg/1)))
+ (/.number number/0)
+ (/.number number/1))))
+ (_.cover [/.use_strict]
+ (and (expression (|>> (:as Frac) (f.= number/0))
+ (/.apply/* (/.closure (list)
+ ($_ /.then
+ /.use_strict
+ (/.declare $arg/0)
+ (/.set $arg/0 (/.number number/0))
+ (/.return $arg/0)))
+ (list)))
+ (|> (/.apply/* (/.closure (list)
+ ($_ /.then
+ /.use_strict
+ ... (/.declare $arg/0)
+ (/.set $arg/0 (/.number number/0))
+ (/.return $arg/0)))
+ (list))
+ ..eval
+ (case> {try.#Success it}
+ false
+
+ {try.#Failure error}
+ true))))
+ ..test|exception
+ ..test|function
+ ..test|branching
+ (_.for [/.Location]
+ ..test/location)
+ (_.for [/.Loop]
+ ..test|loop)
+ ))))
+
+(def: .public test
+ Test
+ (do [! random.monad]
+ []
+ (<| (_.covering /._)
+ (_.for [/.Code /.code])
+ (`` ($_ _.and
+ (_.for [/.Expression]
+ ..test|expression)
+ (_.for [/.Statement]
+ ..test|statement)
+ )))))