summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOwen Jacobson <owen@grimoire.ca>2017-11-15 00:48:19 -0500
committerOwen Jacobson <owen@grimoire.ca>2017-11-15 00:48:19 -0500
commit3e6b4957d1b50948b419a9290cb04b022777b0b3 (patch)
tree2fd87bc4e2a7be18e83101dd257fd7318d66f81d
parent6ab0fb837e5b1cc40002037e2ed15505f99cbbe3 (diff)
Renamed `defmacro` to `define-macro`, we're not heathens.
Started a language manual outline. Removed stray primer.
-rw-r--r--.hypothesis/examples/17015ad1b47afd98/09a8a14f5f6826f2bin10 -> 0 bytes
-rw-r--r--.hypothesis/examples/17015ad1b47afd98/19bb68f9d92692f9bin67 -> 0 bytes
-rw-r--r--.hypothesis/examples/17015ad1b47afd98/2f292b4e710e8682bin5 -> 0 bytes
-rw-r--r--.hypothesis/examples/17015ad1b47afd98/310dfd8bbc90cba3bin0 -> 87 bytes
-rw-r--r--.hypothesis/examples/17015ad1b47afd98/3b91d6fc6c04488bbin0 -> 11 bytes
-rw-r--r--.hypothesis/examples/17015ad1b47afd98/49e6f38c5cc772ecbin0 -> 28 bytes
-rw-r--r--.hypothesis/examples/17015ad1b47afd98/5135a9631c5b557d1
-rw-r--r--.hypothesis/examples/17015ad1b47afd98/56980d5ed7b87686bin9 -> 0 bytes
-rw-r--r--.hypothesis/examples/17015ad1b47afd98/5e8285414e40b47e1
-rw-r--r--.hypothesis/examples/17015ad1b47afd98/61b71c2df2d87966bin8 -> 0 bytes
-rw-r--r--.hypothesis/examples/17015ad1b47afd98/69b43aa9ca8c9717bin27 -> 0 bytes
-rw-r--r--.hypothesis/examples/17015ad1b47afd98/745fc588673e7088bin13 -> 0 bytes
-rw-r--r--.hypothesis/examples/17015ad1b47afd98/79086a9d57f9948dbin6 -> 0 bytes
-rw-r--r--.hypothesis/examples/17015ad1b47afd98/8221fd2283c91e1fbin243 -> 0 bytes
-rw-r--r--.hypothesis/examples/17015ad1b47afd98/8611cbd7e46390b8bin10 -> 0 bytes
-rw-r--r--.hypothesis/examples/17015ad1b47afd98/8b092171a745ad441
-rw-r--r--.hypothesis/examples/17015ad1b47afd98/8ee2d9884de49d9abin5 -> 0 bytes
-rw-r--r--.hypothesis/examples/17015ad1b47afd98/9d45399b0c0edc9f1
-rw-r--r--.hypothesis/examples/17015ad1b47afd98/b0d0244d1f73df81bin105 -> 0 bytes
-rw-r--r--.hypothesis/examples/17015ad1b47afd98/bc4a06b69e0b9538bin0 -> 14 bytes
-rw-r--r--.hypothesis/examples/17015ad1b47afd98/df031fe309e7c5bf1
-rw-r--r--.hypothesis/examples/17015ad1b47afd98/edef7fb7ab16f7c51
-rw-r--r--.hypothesis/examples/641567e7f1117698/003d747d49469dedbin0 -> 17 bytes
-rw-r--r--.hypothesis/examples/641567e7f1117698/005f5867178a5b251
-rw-r--r--.hypothesis/examples/641567e7f1117698/0478b7c7ead9c10dbin1238 -> 0 bytes
-rw-r--r--.hypothesis/examples/641567e7f1117698/0fa317797ca6e4fcbin0 -> 21 bytes
-rw-r--r--.hypothesis/examples/641567e7f1117698/167c6af33b70f99fbin0 -> 10 bytes
-rw-r--r--.hypothesis/examples/641567e7f1117698/1cd68f1893d28b931
-rw-r--r--.hypothesis/examples/641567e7f1117698/1d14332589e1f360bin28 -> 0 bytes
-rw-r--r--.hypothesis/examples/641567e7f1117698/203107b3bbad5816bin6 -> 0 bytes
-rw-r--r--.hypothesis/examples/641567e7f1117698/2bd9f6ed10af66c0bin32 -> 0 bytes
-rw-r--r--.hypothesis/examples/641567e7f1117698/2f69395da78f14d8bin13 -> 0 bytes
-rw-r--r--.hypothesis/examples/641567e7f1117698/3c6c5c8e00e8affebin6 -> 0 bytes
-rw-r--r--.hypothesis/examples/641567e7f1117698/420facf54201ae10bin0 -> 22 bytes
-rw-r--r--.hypothesis/examples/641567e7f1117698/45f01200098f83febin33 -> 0 bytes
-rw-r--r--.hypothesis/examples/641567e7f1117698/47977696f309c829bin6 -> 0 bytes
-rw-r--r--.hypothesis/examples/641567e7f1117698/4aebbeaae7b3a137bin0 -> 6 bytes
-rw-r--r--.hypothesis/examples/641567e7f1117698/5b5722a4fd36dcf6bin0 -> 36 bytes
-rw-r--r--.hypothesis/examples/641567e7f1117698/5be455f23fea5189bin7 -> 0 bytes
-rw-r--r--.hypothesis/examples/641567e7f1117698/63399f455589d4babin15 -> 0 bytes
-rw-r--r--.hypothesis/examples/641567e7f1117698/6d688fd550d32db0bin25 -> 0 bytes
-rw-r--r--.hypothesis/examples/641567e7f1117698/7407b5bc15afb4debin0 -> 22 bytes
-rw-r--r--.hypothesis/examples/641567e7f1117698/7f8faf9da637e86fbin34 -> 0 bytes
-rw-r--r--.hypothesis/examples/641567e7f1117698/86841ab5ff344485bin0 -> 31 bytes
-rw-r--r--.hypothesis/examples/641567e7f1117698/881b6ce80b5bd1fcbin42 -> 0 bytes
-rw-r--r--.hypothesis/examples/641567e7f1117698/9cabd2809ed0730bbin0 -> 21 bytes
-rw-r--r--.hypothesis/examples/641567e7f1117698/a6039ffc453749e1bin29 -> 0 bytes
-rw-r--r--.hypothesis/examples/641567e7f1117698/b19b7b820dddb3c6bin15 -> 0 bytes
-rw-r--r--.hypothesis/examples/641567e7f1117698/b3519a45e48ca658bin0 -> 54 bytes
-rw-r--r--.hypothesis/examples/641567e7f1117698/b52e65a9e0e8f9dbbin6 -> 0 bytes
-rw-r--r--.hypothesis/examples/641567e7f1117698/b8ea6d3dfe56288bbin0 -> 182 bytes
-rw-r--r--.hypothesis/examples/641567e7f1117698/c17293c1c7f91651bin8 -> 0 bytes
-rw-r--r--.hypothesis/examples/641567e7f1117698/c5a0a2529d2deb60bin5 -> 0 bytes
-rw-r--r--.hypothesis/examples/641567e7f1117698/ca1fafbdd4c60ea7bin0 -> 13 bytes
-rw-r--r--.hypothesis/examples/641567e7f1117698/cc0f1d8c6aff0e8bbin0 -> 40 bytes
-rw-r--r--.hypothesis/examples/641567e7f1117698/cfb16a37ef90423bbin7 -> 0 bytes
-rw-r--r--.hypothesis/examples/641567e7f1117698/e0f086f15d94142dbin0 -> 8 bytes
-rw-r--r--.hypothesis/examples/641567e7f1117698/ea786d015fba3beebin9 -> 0 bytes
-rw-r--r--.hypothesis/examples/641567e7f1117698/f41cb651e160d454bin8 -> 0 bytes
-rw-r--r--.hypothesis/examples/641567e7f1117698/f7b6a134061a22a3bin13 -> 0 bytes
-rw-r--r--.hypothesis/examples/c5004b86438ec8a9/a1a8c54704cd3ce5bin24 -> 0 bytes
-rw-r--r--.hypothesis/examples/c72254ca7f2d3ae9/18c072a6c0de03a3bin7 -> 0 bytes
-rw-r--r--.hypothesis/examples/c72254ca7f2d3ae9/76c7ab7f4af319c7bin12 -> 0 bytes
-rw-r--r--.hypothesis/examples/dc26b29be33957c5/34ca52b9868177dabin3 -> 0 bytes
-rw-r--r--.hypothesis/examples/dc26b29be33957c5/34d913d63909f8eabin6 -> 0 bytes
-rw-r--r--.hypothesis/examples/dc26b29be33957c5/3f1b35cc98d1fb17bin0 -> 4 bytes
-rw-r--r--.hypothesis/examples/dc26b29be33957c5/47917d3045f708acbin7 -> 0 bytes
-rw-r--r--.hypothesis/examples/dc26b29be33957c5/4b5882e6feb52553bin10 -> 0 bytes
-rw-r--r--.hypothesis/examples/dc26b29be33957c5/4f5107fafb6b54a4bin0 -> 4 bytes
-rw-r--r--.hypothesis/examples/dc26b29be33957c5/7740d35b09376fb6bin4 -> 0 bytes
-rw-r--r--.hypothesis/examples/dc26b29be33957c5/8c833dd8753e1daabin4 -> 0 bytes
-rw-r--r--.hypothesis/examples/dc26b29be33957c5/ac70533cd7a9e886bin30 -> 0 bytes
-rw-r--r--.hypothesis/examples/dc26b29be33957c5/ca0e04d21db8220cbin0 -> 95 bytes
-rw-r--r--.hypothesis/examples/dc26b29be33957c5/da26276c71f1ad71bin15 -> 0 bytes
-rw-r--r--.hypothesis/examples/dc26b29be33957c5/ee3ad785c37b610dbin7 -> 0 bytes
-rw-r--r--.hypothesis/examples/dc26b29be33957c5/f616bd537b88b020bin0 -> 11 bytes
-rw-r--r--.hypothesis/examples/ec453dcb33aa8b66/00d848fe2a684240bin0 -> 6 bytes
-rw-r--r--.hypothesis/examples/ec453dcb33aa8b66/0280f750919c77c9bin0 -> 14 bytes
-rw-r--r--.hypothesis/examples/ec453dcb33aa8b66/0c69f7daba8b9b86bin10 -> 0 bytes
-rw-r--r--.hypothesis/examples/ec453dcb33aa8b66/0e4509f58fe57ea9bin0 -> 7 bytes
-rw-r--r--.hypothesis/examples/ec453dcb33aa8b66/0f0ccaa6855b4743bin0 -> 10 bytes
-rw-r--r--.hypothesis/examples/ec453dcb33aa8b66/0f42e404bef2b1a3bin11 -> 0 bytes
-rw-r--r--.hypothesis/examples/ec453dcb33aa8b66/1b1de29bcaea4e9ebin0 -> 18 bytes
-rw-r--r--.hypothesis/examples/ec453dcb33aa8b66/204fd63d54e5ffd1bin0 -> 8 bytes
-rw-r--r--.hypothesis/examples/ec453dcb33aa8b66/207b79c0dd1b6fbabin5 -> 0 bytes
-rw-r--r--.hypothesis/examples/ec453dcb33aa8b66/218d87f650043d4dbin21 -> 0 bytes
-rw-r--r--.hypothesis/examples/ec453dcb33aa8b66/2498de236a3b0dbfbin0 -> 8 bytes
-rw-r--r--.hypothesis/examples/ec453dcb33aa8b66/28a055f3278de950bin21 -> 0 bytes
-rw-r--r--.hypothesis/examples/ec453dcb33aa8b66/29a465ca925a55c2bin115 -> 0 bytes
-rw-r--r--.hypothesis/examples/ec453dcb33aa8b66/373d5339acd1960fbin0 -> 22 bytes
-rw-r--r--.hypothesis/examples/ec453dcb33aa8b66/3b15208ee23b0387bin5 -> 0 bytes
-rw-r--r--.hypothesis/examples/ec453dcb33aa8b66/3be6ee08630f7415bin9 -> 0 bytes
-rw-r--r--.hypothesis/examples/ec453dcb33aa8b66/41d22663c8456cf1bin6 -> 0 bytes
-rw-r--r--.hypothesis/examples/ec453dcb33aa8b66/51ab005a386f8742bin5 -> 0 bytes
-rw-r--r--.hypothesis/examples/ec453dcb33aa8b66/51c86c3fc96bfb21bin0 -> 88 bytes
-rw-r--r--.hypothesis/examples/ec453dcb33aa8b66/52f15fc15e039804bin16 -> 0 bytes
-rw-r--r--.hypothesis/examples/ec453dcb33aa8b66/5e1b75e52e4472a7bin14 -> 0 bytes
-rw-r--r--.hypothesis/examples/ec453dcb33aa8b66/67d0320a64a5b588bin0 -> 8 bytes
-rw-r--r--.hypothesis/examples/ec453dcb33aa8b66/82995b8855a9ed39bin0 -> 6 bytes
-rw-r--r--.hypothesis/examples/ec453dcb33aa8b66/a4e2f3a0aa88806fbin0 -> 75 bytes
-rw-r--r--.hypothesis/examples/ec453dcb33aa8b66/aee00180e7174861bin0 -> 9 bytes
-rw-r--r--.hypothesis/examples/ec453dcb33aa8b66/b691cacbafa2b728bin70 -> 0 bytes
-rw-r--r--.hypothesis/examples/ec453dcb33aa8b66/b6d137b15bd5d73bbin0 -> 5 bytes
-rw-r--r--.hypothesis/examples/ec453dcb33aa8b66/b97615e01bdf629abin0 -> 7 bytes
-rw-r--r--.hypothesis/examples/ec453dcb33aa8b66/d21336a11fb4d335bin0 -> 10 bytes
-rw-r--r--.hypothesis/examples/ec453dcb33aa8b66/f41ac3052b176061bin6 -> 0 bytes
-rw-r--r--.hypothesis/examples/ef6354fc2348e0ad/592953b9926ddec71
-rw-r--r--.hypothesis/examples/ef6354fc2348e0ad/e7faf0b097a6f469bin6 -> 0 bytes
-rw-r--r--LANGUAGE.rst375
-rw-r--r--README.rst6
-rw-r--r--actinide/__init__.py11
-rw-r--r--actinide/evaluator.py2
-rw-r--r--actinide/expander.py4
-rw-r--r--primer.py10
-rw-r--r--tests/test_expander.py36
115 files changed, 425 insertions, 28 deletions
diff --git a/.hypothesis/examples/17015ad1b47afd98/09a8a14f5f6826f2 b/.hypothesis/examples/17015ad1b47afd98/09a8a14f5f6826f2
deleted file mode 100644
index 85074f4..0000000
--- a/.hypothesis/examples/17015ad1b47afd98/09a8a14f5f6826f2
+++ /dev/null
Binary files differ
diff --git a/.hypothesis/examples/17015ad1b47afd98/19bb68f9d92692f9 b/.hypothesis/examples/17015ad1b47afd98/19bb68f9d92692f9
deleted file mode 100644
index 05d7933..0000000
--- a/.hypothesis/examples/17015ad1b47afd98/19bb68f9d92692f9
+++ /dev/null
Binary files differ
diff --git a/.hypothesis/examples/17015ad1b47afd98/2f292b4e710e8682 b/.hypothesis/examples/17015ad1b47afd98/2f292b4e710e8682
deleted file mode 100644
index b647d27..0000000
--- a/.hypothesis/examples/17015ad1b47afd98/2f292b4e710e8682
+++ /dev/null
Binary files differ
diff --git a/.hypothesis/examples/17015ad1b47afd98/310dfd8bbc90cba3 b/.hypothesis/examples/17015ad1b47afd98/310dfd8bbc90cba3
new file mode 100644
index 0000000..035b8c2
--- /dev/null
+++ b/.hypothesis/examples/17015ad1b47afd98/310dfd8bbc90cba3
Binary files differ
diff --git a/.hypothesis/examples/17015ad1b47afd98/3b91d6fc6c04488b b/.hypothesis/examples/17015ad1b47afd98/3b91d6fc6c04488b
new file mode 100644
index 0000000..329f226
--- /dev/null
+++ b/.hypothesis/examples/17015ad1b47afd98/3b91d6fc6c04488b
Binary files differ
diff --git a/.hypothesis/examples/17015ad1b47afd98/49e6f38c5cc772ec b/.hypothesis/examples/17015ad1b47afd98/49e6f38c5cc772ec
new file mode 100644
index 0000000..5c100e8
--- /dev/null
+++ b/.hypothesis/examples/17015ad1b47afd98/49e6f38c5cc772ec
Binary files differ
diff --git a/.hypothesis/examples/17015ad1b47afd98/5135a9631c5b557d b/.hypothesis/examples/17015ad1b47afd98/5135a9631c5b557d
new file mode 100644
index 0000000..650fe7c
--- /dev/null
+++ b/.hypothesis/examples/17015ad1b47afd98/5135a9631c5b557d
@@ -0,0 +1 @@
+ \ No newline at end of file
diff --git a/.hypothesis/examples/17015ad1b47afd98/56980d5ed7b87686 b/.hypothesis/examples/17015ad1b47afd98/56980d5ed7b87686
deleted file mode 100644
index 7361f5f..0000000
--- a/.hypothesis/examples/17015ad1b47afd98/56980d5ed7b87686
+++ /dev/null
Binary files differ
diff --git a/.hypothesis/examples/17015ad1b47afd98/5e8285414e40b47e b/.hypothesis/examples/17015ad1b47afd98/5e8285414e40b47e
new file mode 100644
index 0000000..037abe2
--- /dev/null
+++ b/.hypothesis/examples/17015ad1b47afd98/5e8285414e40b47e
@@ -0,0 +1 @@
+ \ No newline at end of file
diff --git a/.hypothesis/examples/17015ad1b47afd98/61b71c2df2d87966 b/.hypothesis/examples/17015ad1b47afd98/61b71c2df2d87966
deleted file mode 100644
index d03d367..0000000
--- a/.hypothesis/examples/17015ad1b47afd98/61b71c2df2d87966
+++ /dev/null
Binary files differ
diff --git a/.hypothesis/examples/17015ad1b47afd98/69b43aa9ca8c9717 b/.hypothesis/examples/17015ad1b47afd98/69b43aa9ca8c9717
deleted file mode 100644
index 9398068..0000000
--- a/.hypothesis/examples/17015ad1b47afd98/69b43aa9ca8c9717
+++ /dev/null
Binary files differ
diff --git a/.hypothesis/examples/17015ad1b47afd98/745fc588673e7088 b/.hypothesis/examples/17015ad1b47afd98/745fc588673e7088
deleted file mode 100644
index 4a6a131..0000000
--- a/.hypothesis/examples/17015ad1b47afd98/745fc588673e7088
+++ /dev/null
Binary files differ
diff --git a/.hypothesis/examples/17015ad1b47afd98/79086a9d57f9948d b/.hypothesis/examples/17015ad1b47afd98/79086a9d57f9948d
deleted file mode 100644
index 460c58e..0000000
--- a/.hypothesis/examples/17015ad1b47afd98/79086a9d57f9948d
+++ /dev/null
Binary files differ
diff --git a/.hypothesis/examples/17015ad1b47afd98/8221fd2283c91e1f b/.hypothesis/examples/17015ad1b47afd98/8221fd2283c91e1f
deleted file mode 100644
index 7401b2e..0000000
--- a/.hypothesis/examples/17015ad1b47afd98/8221fd2283c91e1f
+++ /dev/null
Binary files differ
diff --git a/.hypothesis/examples/17015ad1b47afd98/8611cbd7e46390b8 b/.hypothesis/examples/17015ad1b47afd98/8611cbd7e46390b8
deleted file mode 100644
index f906aa7..0000000
--- a/.hypothesis/examples/17015ad1b47afd98/8611cbd7e46390b8
+++ /dev/null
Binary files differ
diff --git a/.hypothesis/examples/17015ad1b47afd98/8b092171a745ad44 b/.hypothesis/examples/17015ad1b47afd98/8b092171a745ad44
deleted file mode 100644
index 6368d9d..0000000
--- a/.hypothesis/examples/17015ad1b47afd98/8b092171a745ad44
+++ /dev/null
@@ -1 +0,0 @@
- \ No newline at end of file
diff --git a/.hypothesis/examples/17015ad1b47afd98/8ee2d9884de49d9a b/.hypothesis/examples/17015ad1b47afd98/8ee2d9884de49d9a
deleted file mode 100644
index 87376ae..0000000
--- a/.hypothesis/examples/17015ad1b47afd98/8ee2d9884de49d9a
+++ /dev/null
Binary files differ
diff --git a/.hypothesis/examples/17015ad1b47afd98/9d45399b0c0edc9f b/.hypothesis/examples/17015ad1b47afd98/9d45399b0c0edc9f
new file mode 100644
index 0000000..5b96cd0
--- /dev/null
+++ b/.hypothesis/examples/17015ad1b47afd98/9d45399b0c0edc9f
@@ -0,0 +1 @@
+ \ No newline at end of file
diff --git a/.hypothesis/examples/17015ad1b47afd98/b0d0244d1f73df81 b/.hypothesis/examples/17015ad1b47afd98/b0d0244d1f73df81
deleted file mode 100644
index ec53a8a..0000000
--- a/.hypothesis/examples/17015ad1b47afd98/b0d0244d1f73df81
+++ /dev/null
Binary files differ
diff --git a/.hypothesis/examples/17015ad1b47afd98/bc4a06b69e0b9538 b/.hypothesis/examples/17015ad1b47afd98/bc4a06b69e0b9538
new file mode 100644
index 0000000..7b72f6c
--- /dev/null
+++ b/.hypothesis/examples/17015ad1b47afd98/bc4a06b69e0b9538
Binary files differ
diff --git a/.hypothesis/examples/17015ad1b47afd98/df031fe309e7c5bf b/.hypothesis/examples/17015ad1b47afd98/df031fe309e7c5bf
deleted file mode 100644
index 6e595fc..0000000
--- a/.hypothesis/examples/17015ad1b47afd98/df031fe309e7c5bf
+++ /dev/null
@@ -1 +0,0 @@
- \ No newline at end of file
diff --git a/.hypothesis/examples/17015ad1b47afd98/edef7fb7ab16f7c5 b/.hypothesis/examples/17015ad1b47afd98/edef7fb7ab16f7c5
new file mode 100644
index 0000000..6fb13f6
--- /dev/null
+++ b/.hypothesis/examples/17015ad1b47afd98/edef7fb7ab16f7c5
@@ -0,0 +1 @@
+ \ No newline at end of file
diff --git a/.hypothesis/examples/641567e7f1117698/003d747d49469ded b/.hypothesis/examples/641567e7f1117698/003d747d49469ded
new file mode 100644
index 0000000..4801e1d
--- /dev/null
+++ b/.hypothesis/examples/641567e7f1117698/003d747d49469ded
Binary files differ
diff --git a/.hypothesis/examples/641567e7f1117698/005f5867178a5b25 b/.hypothesis/examples/641567e7f1117698/005f5867178a5b25
deleted file mode 100644
index 99d1269..0000000
--- a/.hypothesis/examples/641567e7f1117698/005f5867178a5b25
+++ /dev/null
@@ -1 +0,0 @@
- \ No newline at end of file
diff --git a/.hypothesis/examples/641567e7f1117698/0478b7c7ead9c10d b/.hypothesis/examples/641567e7f1117698/0478b7c7ead9c10d
deleted file mode 100644
index 893e09d..0000000
--- a/.hypothesis/examples/641567e7f1117698/0478b7c7ead9c10d
+++ /dev/null
Binary files differ
diff --git a/.hypothesis/examples/641567e7f1117698/0fa317797ca6e4fc b/.hypothesis/examples/641567e7f1117698/0fa317797ca6e4fc
new file mode 100644
index 0000000..844b674
--- /dev/null
+++ b/.hypothesis/examples/641567e7f1117698/0fa317797ca6e4fc
Binary files differ
diff --git a/.hypothesis/examples/641567e7f1117698/167c6af33b70f99f b/.hypothesis/examples/641567e7f1117698/167c6af33b70f99f
new file mode 100644
index 0000000..3b09c3d
--- /dev/null
+++ b/.hypothesis/examples/641567e7f1117698/167c6af33b70f99f
Binary files differ
diff --git a/.hypothesis/examples/641567e7f1117698/1cd68f1893d28b93 b/.hypothesis/examples/641567e7f1117698/1cd68f1893d28b93
deleted file mode 100644
index 1e4c7a3..0000000
--- a/.hypothesis/examples/641567e7f1117698/1cd68f1893d28b93
+++ /dev/null
@@ -1 +0,0 @@
- \ No newline at end of file
diff --git a/.hypothesis/examples/641567e7f1117698/1d14332589e1f360 b/.hypothesis/examples/641567e7f1117698/1d14332589e1f360
deleted file mode 100644
index 4b05fc7..0000000
--- a/.hypothesis/examples/641567e7f1117698/1d14332589e1f360
+++ /dev/null
Binary files differ
diff --git a/.hypothesis/examples/641567e7f1117698/203107b3bbad5816 b/.hypothesis/examples/641567e7f1117698/203107b3bbad5816
deleted file mode 100644
index 406c80a..0000000
--- a/.hypothesis/examples/641567e7f1117698/203107b3bbad5816
+++ /dev/null
Binary files differ
diff --git a/.hypothesis/examples/641567e7f1117698/2bd9f6ed10af66c0 b/.hypothesis/examples/641567e7f1117698/2bd9f6ed10af66c0
deleted file mode 100644
index 938aced..0000000
--- a/.hypothesis/examples/641567e7f1117698/2bd9f6ed10af66c0
+++ /dev/null
Binary files differ
diff --git a/.hypothesis/examples/641567e7f1117698/2f69395da78f14d8 b/.hypothesis/examples/641567e7f1117698/2f69395da78f14d8
deleted file mode 100644
index 77a7ec0..0000000
--- a/.hypothesis/examples/641567e7f1117698/2f69395da78f14d8
+++ /dev/null
Binary files differ
diff --git a/.hypothesis/examples/641567e7f1117698/3c6c5c8e00e8affe b/.hypothesis/examples/641567e7f1117698/3c6c5c8e00e8affe
deleted file mode 100644
index 4943902..0000000
--- a/.hypothesis/examples/641567e7f1117698/3c6c5c8e00e8affe
+++ /dev/null
Binary files differ
diff --git a/.hypothesis/examples/641567e7f1117698/420facf54201ae10 b/.hypothesis/examples/641567e7f1117698/420facf54201ae10
new file mode 100644
index 0000000..eb32430
--- /dev/null
+++ b/.hypothesis/examples/641567e7f1117698/420facf54201ae10
Binary files differ
diff --git a/.hypothesis/examples/641567e7f1117698/45f01200098f83fe b/.hypothesis/examples/641567e7f1117698/45f01200098f83fe
deleted file mode 100644
index f38d7c8..0000000
--- a/.hypothesis/examples/641567e7f1117698/45f01200098f83fe
+++ /dev/null
Binary files differ
diff --git a/.hypothesis/examples/641567e7f1117698/47977696f309c829 b/.hypothesis/examples/641567e7f1117698/47977696f309c829
deleted file mode 100644
index 0af8a4e..0000000
--- a/.hypothesis/examples/641567e7f1117698/47977696f309c829
+++ /dev/null
Binary files differ
diff --git a/.hypothesis/examples/641567e7f1117698/4aebbeaae7b3a137 b/.hypothesis/examples/641567e7f1117698/4aebbeaae7b3a137
new file mode 100644
index 0000000..9cb8041
--- /dev/null
+++ b/.hypothesis/examples/641567e7f1117698/4aebbeaae7b3a137
Binary files differ
diff --git a/.hypothesis/examples/641567e7f1117698/5b5722a4fd36dcf6 b/.hypothesis/examples/641567e7f1117698/5b5722a4fd36dcf6
new file mode 100644
index 0000000..8ae82db
--- /dev/null
+++ b/.hypothesis/examples/641567e7f1117698/5b5722a4fd36dcf6
Binary files differ
diff --git a/.hypothesis/examples/641567e7f1117698/5be455f23fea5189 b/.hypothesis/examples/641567e7f1117698/5be455f23fea5189
deleted file mode 100644
index f4afa45..0000000
--- a/.hypothesis/examples/641567e7f1117698/5be455f23fea5189
+++ /dev/null
Binary files differ
diff --git a/.hypothesis/examples/641567e7f1117698/63399f455589d4ba b/.hypothesis/examples/641567e7f1117698/63399f455589d4ba
deleted file mode 100644
index ab41705..0000000
--- a/.hypothesis/examples/641567e7f1117698/63399f455589d4ba
+++ /dev/null
Binary files differ
diff --git a/.hypothesis/examples/641567e7f1117698/6d688fd550d32db0 b/.hypothesis/examples/641567e7f1117698/6d688fd550d32db0
deleted file mode 100644
index 9e6d12c..0000000
--- a/.hypothesis/examples/641567e7f1117698/6d688fd550d32db0
+++ /dev/null
Binary files differ
diff --git a/.hypothesis/examples/641567e7f1117698/7407b5bc15afb4de b/.hypothesis/examples/641567e7f1117698/7407b5bc15afb4de
new file mode 100644
index 0000000..3900a51
--- /dev/null
+++ b/.hypothesis/examples/641567e7f1117698/7407b5bc15afb4de
Binary files differ
diff --git a/.hypothesis/examples/641567e7f1117698/7f8faf9da637e86f b/.hypothesis/examples/641567e7f1117698/7f8faf9da637e86f
deleted file mode 100644
index 474cc5c..0000000
--- a/.hypothesis/examples/641567e7f1117698/7f8faf9da637e86f
+++ /dev/null
Binary files differ
diff --git a/.hypothesis/examples/641567e7f1117698/86841ab5ff344485 b/.hypothesis/examples/641567e7f1117698/86841ab5ff344485
new file mode 100644
index 0000000..0a781a3
--- /dev/null
+++ b/.hypothesis/examples/641567e7f1117698/86841ab5ff344485
Binary files differ
diff --git a/.hypothesis/examples/641567e7f1117698/881b6ce80b5bd1fc b/.hypothesis/examples/641567e7f1117698/881b6ce80b5bd1fc
deleted file mode 100644
index c8c74ca..0000000
--- a/.hypothesis/examples/641567e7f1117698/881b6ce80b5bd1fc
+++ /dev/null
Binary files differ
diff --git a/.hypothesis/examples/641567e7f1117698/9cabd2809ed0730b b/.hypothesis/examples/641567e7f1117698/9cabd2809ed0730b
new file mode 100644
index 0000000..1d95319
--- /dev/null
+++ b/.hypothesis/examples/641567e7f1117698/9cabd2809ed0730b
Binary files differ
diff --git a/.hypothesis/examples/641567e7f1117698/a6039ffc453749e1 b/.hypothesis/examples/641567e7f1117698/a6039ffc453749e1
deleted file mode 100644
index 9878f1a..0000000
--- a/.hypothesis/examples/641567e7f1117698/a6039ffc453749e1
+++ /dev/null
Binary files differ
diff --git a/.hypothesis/examples/641567e7f1117698/b19b7b820dddb3c6 b/.hypothesis/examples/641567e7f1117698/b19b7b820dddb3c6
deleted file mode 100644
index ecb949e..0000000
--- a/.hypothesis/examples/641567e7f1117698/b19b7b820dddb3c6
+++ /dev/null
Binary files differ
diff --git a/.hypothesis/examples/641567e7f1117698/b3519a45e48ca658 b/.hypothesis/examples/641567e7f1117698/b3519a45e48ca658
new file mode 100644
index 0000000..9824105
--- /dev/null
+++ b/.hypothesis/examples/641567e7f1117698/b3519a45e48ca658
Binary files differ
diff --git a/.hypothesis/examples/641567e7f1117698/b52e65a9e0e8f9db b/.hypothesis/examples/641567e7f1117698/b52e65a9e0e8f9db
deleted file mode 100644
index cfd86fa..0000000
--- a/.hypothesis/examples/641567e7f1117698/b52e65a9e0e8f9db
+++ /dev/null
Binary files differ
diff --git a/.hypothesis/examples/641567e7f1117698/b8ea6d3dfe56288b b/.hypothesis/examples/641567e7f1117698/b8ea6d3dfe56288b
new file mode 100644
index 0000000..f219235
--- /dev/null
+++ b/.hypothesis/examples/641567e7f1117698/b8ea6d3dfe56288b
Binary files differ
diff --git a/.hypothesis/examples/641567e7f1117698/c17293c1c7f91651 b/.hypothesis/examples/641567e7f1117698/c17293c1c7f91651
deleted file mode 100644
index 29ce808..0000000
--- a/.hypothesis/examples/641567e7f1117698/c17293c1c7f91651
+++ /dev/null
Binary files differ
diff --git a/.hypothesis/examples/641567e7f1117698/c5a0a2529d2deb60 b/.hypothesis/examples/641567e7f1117698/c5a0a2529d2deb60
deleted file mode 100644
index 51d72fb..0000000
--- a/.hypothesis/examples/641567e7f1117698/c5a0a2529d2deb60
+++ /dev/null
Binary files differ
diff --git a/.hypothesis/examples/641567e7f1117698/ca1fafbdd4c60ea7 b/.hypothesis/examples/641567e7f1117698/ca1fafbdd4c60ea7
new file mode 100644
index 0000000..a677575
--- /dev/null
+++ b/.hypothesis/examples/641567e7f1117698/ca1fafbdd4c60ea7
Binary files differ
diff --git a/.hypothesis/examples/641567e7f1117698/cc0f1d8c6aff0e8b b/.hypothesis/examples/641567e7f1117698/cc0f1d8c6aff0e8b
new file mode 100644
index 0000000..610471e
--- /dev/null
+++ b/.hypothesis/examples/641567e7f1117698/cc0f1d8c6aff0e8b
Binary files differ
diff --git a/.hypothesis/examples/641567e7f1117698/cfb16a37ef90423b b/.hypothesis/examples/641567e7f1117698/cfb16a37ef90423b
deleted file mode 100644
index 6402578..0000000
--- a/.hypothesis/examples/641567e7f1117698/cfb16a37ef90423b
+++ /dev/null
Binary files differ
diff --git a/.hypothesis/examples/641567e7f1117698/e0f086f15d94142d b/.hypothesis/examples/641567e7f1117698/e0f086f15d94142d
new file mode 100644
index 0000000..bf16dc9
--- /dev/null
+++ b/.hypothesis/examples/641567e7f1117698/e0f086f15d94142d
Binary files differ
diff --git a/.hypothesis/examples/641567e7f1117698/ea786d015fba3bee b/.hypothesis/examples/641567e7f1117698/ea786d015fba3bee
deleted file mode 100644
index 23dcd5a..0000000
--- a/.hypothesis/examples/641567e7f1117698/ea786d015fba3bee
+++ /dev/null
Binary files differ
diff --git a/.hypothesis/examples/641567e7f1117698/f41cb651e160d454 b/.hypothesis/examples/641567e7f1117698/f41cb651e160d454
deleted file mode 100644
index 4f7bfb6..0000000
--- a/.hypothesis/examples/641567e7f1117698/f41cb651e160d454
+++ /dev/null
Binary files differ
diff --git a/.hypothesis/examples/641567e7f1117698/f7b6a134061a22a3 b/.hypothesis/examples/641567e7f1117698/f7b6a134061a22a3
deleted file mode 100644
index f4de7f5..0000000
--- a/.hypothesis/examples/641567e7f1117698/f7b6a134061a22a3
+++ /dev/null
Binary files differ
diff --git a/.hypothesis/examples/c5004b86438ec8a9/a1a8c54704cd3ce5 b/.hypothesis/examples/c5004b86438ec8a9/a1a8c54704cd3ce5
deleted file mode 100644
index ee13fd2..0000000
--- a/.hypothesis/examples/c5004b86438ec8a9/a1a8c54704cd3ce5
+++ /dev/null
Binary files differ
diff --git a/.hypothesis/examples/c72254ca7f2d3ae9/18c072a6c0de03a3 b/.hypothesis/examples/c72254ca7f2d3ae9/18c072a6c0de03a3
deleted file mode 100644
index 9d4e4f1..0000000
--- a/.hypothesis/examples/c72254ca7f2d3ae9/18c072a6c0de03a3
+++ /dev/null
Binary files differ
diff --git a/.hypothesis/examples/c72254ca7f2d3ae9/76c7ab7f4af319c7 b/.hypothesis/examples/c72254ca7f2d3ae9/76c7ab7f4af319c7
deleted file mode 100644
index c28f678..0000000
--- a/.hypothesis/examples/c72254ca7f2d3ae9/76c7ab7f4af319c7
+++ /dev/null
Binary files differ
diff --git a/.hypothesis/examples/dc26b29be33957c5/34ca52b9868177da b/.hypothesis/examples/dc26b29be33957c5/34ca52b9868177da
deleted file mode 100644
index 805297c..0000000
--- a/.hypothesis/examples/dc26b29be33957c5/34ca52b9868177da
+++ /dev/null
Binary files differ
diff --git a/.hypothesis/examples/dc26b29be33957c5/34d913d63909f8ea b/.hypothesis/examples/dc26b29be33957c5/34d913d63909f8ea
deleted file mode 100644
index ea56339..0000000
--- a/.hypothesis/examples/dc26b29be33957c5/34d913d63909f8ea
+++ /dev/null
Binary files differ
diff --git a/.hypothesis/examples/dc26b29be33957c5/3f1b35cc98d1fb17 b/.hypothesis/examples/dc26b29be33957c5/3f1b35cc98d1fb17
new file mode 100644
index 0000000..1744897
--- /dev/null
+++ b/.hypothesis/examples/dc26b29be33957c5/3f1b35cc98d1fb17
Binary files differ
diff --git a/.hypothesis/examples/dc26b29be33957c5/47917d3045f708ac b/.hypothesis/examples/dc26b29be33957c5/47917d3045f708ac
deleted file mode 100644
index 31fe863..0000000
--- a/.hypothesis/examples/dc26b29be33957c5/47917d3045f708ac
+++ /dev/null
Binary files differ
diff --git a/.hypothesis/examples/dc26b29be33957c5/4b5882e6feb52553 b/.hypothesis/examples/dc26b29be33957c5/4b5882e6feb52553
deleted file mode 100644
index 5c95675..0000000
--- a/.hypothesis/examples/dc26b29be33957c5/4b5882e6feb52553
+++ /dev/null
Binary files differ
diff --git a/.hypothesis/examples/dc26b29be33957c5/4f5107fafb6b54a4 b/.hypothesis/examples/dc26b29be33957c5/4f5107fafb6b54a4
new file mode 100644
index 0000000..ffc33bf
--- /dev/null
+++ b/.hypothesis/examples/dc26b29be33957c5/4f5107fafb6b54a4
Binary files differ
diff --git a/.hypothesis/examples/dc26b29be33957c5/7740d35b09376fb6 b/.hypothesis/examples/dc26b29be33957c5/7740d35b09376fb6
deleted file mode 100644
index 3aa0fbf..0000000
--- a/.hypothesis/examples/dc26b29be33957c5/7740d35b09376fb6
+++ /dev/null
Binary files differ
diff --git a/.hypothesis/examples/dc26b29be33957c5/8c833dd8753e1daa b/.hypothesis/examples/dc26b29be33957c5/8c833dd8753e1daa
deleted file mode 100644
index 087ea4e..0000000
--- a/.hypothesis/examples/dc26b29be33957c5/8c833dd8753e1daa
+++ /dev/null
Binary files differ
diff --git a/.hypothesis/examples/dc26b29be33957c5/ac70533cd7a9e886 b/.hypothesis/examples/dc26b29be33957c5/ac70533cd7a9e886
deleted file mode 100644
index 85a71ea..0000000
--- a/.hypothesis/examples/dc26b29be33957c5/ac70533cd7a9e886
+++ /dev/null
Binary files differ
diff --git a/.hypothesis/examples/dc26b29be33957c5/ca0e04d21db8220c b/.hypothesis/examples/dc26b29be33957c5/ca0e04d21db8220c
new file mode 100644
index 0000000..43f275a
--- /dev/null
+++ b/.hypothesis/examples/dc26b29be33957c5/ca0e04d21db8220c
Binary files differ
diff --git a/.hypothesis/examples/dc26b29be33957c5/da26276c71f1ad71 b/.hypothesis/examples/dc26b29be33957c5/da26276c71f1ad71
deleted file mode 100644
index 52bf383..0000000
--- a/.hypothesis/examples/dc26b29be33957c5/da26276c71f1ad71
+++ /dev/null
Binary files differ
diff --git a/.hypothesis/examples/dc26b29be33957c5/ee3ad785c37b610d b/.hypothesis/examples/dc26b29be33957c5/ee3ad785c37b610d
deleted file mode 100644
index 81d5bc2..0000000
--- a/.hypothesis/examples/dc26b29be33957c5/ee3ad785c37b610d
+++ /dev/null
Binary files differ
diff --git a/.hypothesis/examples/dc26b29be33957c5/f616bd537b88b020 b/.hypothesis/examples/dc26b29be33957c5/f616bd537b88b020
new file mode 100644
index 0000000..98fce50
--- /dev/null
+++ b/.hypothesis/examples/dc26b29be33957c5/f616bd537b88b020
Binary files differ
diff --git a/.hypothesis/examples/ec453dcb33aa8b66/00d848fe2a684240 b/.hypothesis/examples/ec453dcb33aa8b66/00d848fe2a684240
new file mode 100644
index 0000000..69fcea5
--- /dev/null
+++ b/.hypothesis/examples/ec453dcb33aa8b66/00d848fe2a684240
Binary files differ
diff --git a/.hypothesis/examples/ec453dcb33aa8b66/0280f750919c77c9 b/.hypothesis/examples/ec453dcb33aa8b66/0280f750919c77c9
new file mode 100644
index 0000000..9a892b5
--- /dev/null
+++ b/.hypothesis/examples/ec453dcb33aa8b66/0280f750919c77c9
Binary files differ
diff --git a/.hypothesis/examples/ec453dcb33aa8b66/0c69f7daba8b9b86 b/.hypothesis/examples/ec453dcb33aa8b66/0c69f7daba8b9b86
deleted file mode 100644
index 9034b55..0000000
--- a/.hypothesis/examples/ec453dcb33aa8b66/0c69f7daba8b9b86
+++ /dev/null
Binary files differ
diff --git a/.hypothesis/examples/ec453dcb33aa8b66/0e4509f58fe57ea9 b/.hypothesis/examples/ec453dcb33aa8b66/0e4509f58fe57ea9
new file mode 100644
index 0000000..25fc896
--- /dev/null
+++ b/.hypothesis/examples/ec453dcb33aa8b66/0e4509f58fe57ea9
Binary files differ
diff --git a/.hypothesis/examples/ec453dcb33aa8b66/0f0ccaa6855b4743 b/.hypothesis/examples/ec453dcb33aa8b66/0f0ccaa6855b4743
new file mode 100644
index 0000000..b094991
--- /dev/null
+++ b/.hypothesis/examples/ec453dcb33aa8b66/0f0ccaa6855b4743
Binary files differ
diff --git a/.hypothesis/examples/ec453dcb33aa8b66/0f42e404bef2b1a3 b/.hypothesis/examples/ec453dcb33aa8b66/0f42e404bef2b1a3
deleted file mode 100644
index 1471346..0000000
--- a/.hypothesis/examples/ec453dcb33aa8b66/0f42e404bef2b1a3
+++ /dev/null
Binary files differ
diff --git a/.hypothesis/examples/ec453dcb33aa8b66/1b1de29bcaea4e9e b/.hypothesis/examples/ec453dcb33aa8b66/1b1de29bcaea4e9e
new file mode 100644
index 0000000..815a754
--- /dev/null
+++ b/.hypothesis/examples/ec453dcb33aa8b66/1b1de29bcaea4e9e
Binary files differ
diff --git a/.hypothesis/examples/ec453dcb33aa8b66/204fd63d54e5ffd1 b/.hypothesis/examples/ec453dcb33aa8b66/204fd63d54e5ffd1
new file mode 100644
index 0000000..ba755f2
--- /dev/null
+++ b/.hypothesis/examples/ec453dcb33aa8b66/204fd63d54e5ffd1
Binary files differ
diff --git a/.hypothesis/examples/ec453dcb33aa8b66/207b79c0dd1b6fba b/.hypothesis/examples/ec453dcb33aa8b66/207b79c0dd1b6fba
deleted file mode 100644
index 6345bd4..0000000
--- a/.hypothesis/examples/ec453dcb33aa8b66/207b79c0dd1b6fba
+++ /dev/null
Binary files differ
diff --git a/.hypothesis/examples/ec453dcb33aa8b66/218d87f650043d4d b/.hypothesis/examples/ec453dcb33aa8b66/218d87f650043d4d
deleted file mode 100644
index cfd6a40..0000000
--- a/.hypothesis/examples/ec453dcb33aa8b66/218d87f650043d4d
+++ /dev/null
Binary files differ
diff --git a/.hypothesis/examples/ec453dcb33aa8b66/2498de236a3b0dbf b/.hypothesis/examples/ec453dcb33aa8b66/2498de236a3b0dbf
new file mode 100644
index 0000000..52fc6cb
--- /dev/null
+++ b/.hypothesis/examples/ec453dcb33aa8b66/2498de236a3b0dbf
Binary files differ
diff --git a/.hypothesis/examples/ec453dcb33aa8b66/28a055f3278de950 b/.hypothesis/examples/ec453dcb33aa8b66/28a055f3278de950
deleted file mode 100644
index bfce649..0000000
--- a/.hypothesis/examples/ec453dcb33aa8b66/28a055f3278de950
+++ /dev/null
Binary files differ
diff --git a/.hypothesis/examples/ec453dcb33aa8b66/29a465ca925a55c2 b/.hypothesis/examples/ec453dcb33aa8b66/29a465ca925a55c2
deleted file mode 100644
index 1a9248f..0000000
--- a/.hypothesis/examples/ec453dcb33aa8b66/29a465ca925a55c2
+++ /dev/null
Binary files differ
diff --git a/.hypothesis/examples/ec453dcb33aa8b66/373d5339acd1960f b/.hypothesis/examples/ec453dcb33aa8b66/373d5339acd1960f
new file mode 100644
index 0000000..6394bf6
--- /dev/null
+++ b/.hypothesis/examples/ec453dcb33aa8b66/373d5339acd1960f
Binary files differ
diff --git a/.hypothesis/examples/ec453dcb33aa8b66/3b15208ee23b0387 b/.hypothesis/examples/ec453dcb33aa8b66/3b15208ee23b0387
deleted file mode 100644
index 0bbbf2f..0000000
--- a/.hypothesis/examples/ec453dcb33aa8b66/3b15208ee23b0387
+++ /dev/null
Binary files differ
diff --git a/.hypothesis/examples/ec453dcb33aa8b66/3be6ee08630f7415 b/.hypothesis/examples/ec453dcb33aa8b66/3be6ee08630f7415
deleted file mode 100644
index da37579..0000000
--- a/.hypothesis/examples/ec453dcb33aa8b66/3be6ee08630f7415
+++ /dev/null
Binary files differ
diff --git a/.hypothesis/examples/ec453dcb33aa8b66/41d22663c8456cf1 b/.hypothesis/examples/ec453dcb33aa8b66/41d22663c8456cf1
deleted file mode 100644
index 8ed04c1..0000000
--- a/.hypothesis/examples/ec453dcb33aa8b66/41d22663c8456cf1
+++ /dev/null
Binary files differ
diff --git a/.hypothesis/examples/ec453dcb33aa8b66/51ab005a386f8742 b/.hypothesis/examples/ec453dcb33aa8b66/51ab005a386f8742
deleted file mode 100644
index 6af7a69..0000000
--- a/.hypothesis/examples/ec453dcb33aa8b66/51ab005a386f8742
+++ /dev/null
Binary files differ
diff --git a/.hypothesis/examples/ec453dcb33aa8b66/51c86c3fc96bfb21 b/.hypothesis/examples/ec453dcb33aa8b66/51c86c3fc96bfb21
new file mode 100644
index 0000000..db4fb2a
--- /dev/null
+++ b/.hypothesis/examples/ec453dcb33aa8b66/51c86c3fc96bfb21
Binary files differ
diff --git a/.hypothesis/examples/ec453dcb33aa8b66/52f15fc15e039804 b/.hypothesis/examples/ec453dcb33aa8b66/52f15fc15e039804
deleted file mode 100644
index 11037b4..0000000
--- a/.hypothesis/examples/ec453dcb33aa8b66/52f15fc15e039804
+++ /dev/null
Binary files differ
diff --git a/.hypothesis/examples/ec453dcb33aa8b66/5e1b75e52e4472a7 b/.hypothesis/examples/ec453dcb33aa8b66/5e1b75e52e4472a7
deleted file mode 100644
index 47ff157..0000000
--- a/.hypothesis/examples/ec453dcb33aa8b66/5e1b75e52e4472a7
+++ /dev/null
Binary files differ
diff --git a/.hypothesis/examples/ec453dcb33aa8b66/67d0320a64a5b588 b/.hypothesis/examples/ec453dcb33aa8b66/67d0320a64a5b588
new file mode 100644
index 0000000..eaf1c1e
--- /dev/null
+++ b/.hypothesis/examples/ec453dcb33aa8b66/67d0320a64a5b588
Binary files differ
diff --git a/.hypothesis/examples/ec453dcb33aa8b66/82995b8855a9ed39 b/.hypothesis/examples/ec453dcb33aa8b66/82995b8855a9ed39
new file mode 100644
index 0000000..fb4f94d
--- /dev/null
+++ b/.hypothesis/examples/ec453dcb33aa8b66/82995b8855a9ed39
Binary files differ
diff --git a/.hypothesis/examples/ec453dcb33aa8b66/a4e2f3a0aa88806f b/.hypothesis/examples/ec453dcb33aa8b66/a4e2f3a0aa88806f
new file mode 100644
index 0000000..23745d8
--- /dev/null
+++ b/.hypothesis/examples/ec453dcb33aa8b66/a4e2f3a0aa88806f
Binary files differ
diff --git a/.hypothesis/examples/ec453dcb33aa8b66/aee00180e7174861 b/.hypothesis/examples/ec453dcb33aa8b66/aee00180e7174861
new file mode 100644
index 0000000..906d9c9
--- /dev/null
+++ b/.hypothesis/examples/ec453dcb33aa8b66/aee00180e7174861
Binary files differ
diff --git a/.hypothesis/examples/ec453dcb33aa8b66/b691cacbafa2b728 b/.hypothesis/examples/ec453dcb33aa8b66/b691cacbafa2b728
deleted file mode 100644
index 2502421..0000000
--- a/.hypothesis/examples/ec453dcb33aa8b66/b691cacbafa2b728
+++ /dev/null
Binary files differ
diff --git a/.hypothesis/examples/ec453dcb33aa8b66/b6d137b15bd5d73b b/.hypothesis/examples/ec453dcb33aa8b66/b6d137b15bd5d73b
new file mode 100644
index 0000000..5873064
--- /dev/null
+++ b/.hypothesis/examples/ec453dcb33aa8b66/b6d137b15bd5d73b
Binary files differ
diff --git a/.hypothesis/examples/ec453dcb33aa8b66/b97615e01bdf629a b/.hypothesis/examples/ec453dcb33aa8b66/b97615e01bdf629a
new file mode 100644
index 0000000..082221f
--- /dev/null
+++ b/.hypothesis/examples/ec453dcb33aa8b66/b97615e01bdf629a
Binary files differ
diff --git a/.hypothesis/examples/ec453dcb33aa8b66/d21336a11fb4d335 b/.hypothesis/examples/ec453dcb33aa8b66/d21336a11fb4d335
new file mode 100644
index 0000000..f862c7c
--- /dev/null
+++ b/.hypothesis/examples/ec453dcb33aa8b66/d21336a11fb4d335
Binary files differ
diff --git a/.hypothesis/examples/ec453dcb33aa8b66/f41ac3052b176061 b/.hypothesis/examples/ec453dcb33aa8b66/f41ac3052b176061
deleted file mode 100644
index 683ea2e..0000000
--- a/.hypothesis/examples/ec453dcb33aa8b66/f41ac3052b176061
+++ /dev/null
Binary files differ
diff --git a/.hypothesis/examples/ef6354fc2348e0ad/592953b9926ddec7 b/.hypothesis/examples/ef6354fc2348e0ad/592953b9926ddec7
new file mode 100644
index 0000000..331f272
--- /dev/null
+++ b/.hypothesis/examples/ef6354fc2348e0ad/592953b9926ddec7
@@ -0,0 +1 @@
+d
diff --git a/.hypothesis/examples/ef6354fc2348e0ad/e7faf0b097a6f469 b/.hypothesis/examples/ef6354fc2348e0ad/e7faf0b097a6f469
deleted file mode 100644
index cf2a103..0000000
--- a/.hypothesis/examples/ef6354fc2348e0ad/e7faf0b097a6f469
+++ /dev/null
Binary files differ
diff --git a/LANGUAGE.rst b/LANGUAGE.rst
new file mode 100644
index 0000000..ed3e942
--- /dev/null
+++ b/LANGUAGE.rst
@@ -0,0 +1,375 @@
+#################################
+The Actinide Programming Language
+#################################
+
+*****
+Forms
+*****
+
+* The basic unit of Actinide syntax.
+
+* The basic unit of Actinide evaluation.
+
+* A program is evaluated by *reducing* forms to produce a final value, applying
+ side effects during the reduction.
+
+* What does a form look like?
+
+ * Simple forms: literals (and intro to types)
+
+ * Integers: a leading - sign for negative numbers, followed by a
+ sequence of digits and underscores. Represent base-ten values with no
+ fractional part. Examples: ``10``, ``-2_049``.
+
+ * Decimals: a leading - sign for negative numbers, followed by a
+ sequence of digits and underscores, followed by a dot, followed by a
+ sequence of digits and underscores. Represent base-ten values which
+ may have a factional part. Examples: ``10.0``, ``-2_049.501_2``.
+
+ * Strings: any sequence of characters other than ``"`` or ``\``,
+ enclosed in matching ``"`` marks. The sequences ``\"`` and ``\\`` are
+ "escape" sequences, representing a ``"`` or ``\`` character
+ respectively. Examples: ``"Hello, world."``, ``"😡💩🚀"``, ``"Quoth
+ the raven, \"Four Oh Four.\""``.
+
+ * Booleans: the special values meaning "true" and "false." Preferred
+ for boolean logic operations. They are ``#t`` for true, and ``#f``
+ for false.
+
+ * Simple forms: symbols
+
+ * Sequences of letters, numbers, and symbols not surrounded by quotes,
+ and which are not themselves integers, decimals, or booleans.
+
+ * Represent variables and constants in the program's source.
+
+ * Evaluation of variables is covered later in this document.
+
+ * Examples: ``hello``, ``+``, ``my-🚀``.
+
+ * Special mention: comments
+
+ * Cannot appear *inside* a string.
+
+ * Starts with a ``;``, continues to the end of the line.
+
+ * Dropped from the program entirely.
+
+ * Examples: ``; this function is extremely spicy.``
+
+* Compound forms: lists
+
+ * An opening ``(``, followed by a sequence of "subforms" separated by
+ spaces, followed by a closing ``)``.
+
+ * Subforms may be any form, including another list.
+
+ * Represent function application as well as special
+
+* Compound forms: quotes, quasiquotes, and unqoute forms.
+
+ * The forms ``'``, ``\```, ``,``, and ``,@`` represent "quote" forms.
+
+ * These are discussed in detail in the Macros section, later on.
+
+******************
+Simple Expressions
+******************
+
+* Evaluation of a form *reduces* the form to a simpler form - ideally, into a
+ list of atomic values.
+
+* Every kind of form can be evaluated.
+
+* Evaluation of literals:
+
+ * Integers, decimals, strings, booleans evaluate to themselves. The number
+ ``1`` or the string ``"Hello, world"`` cannot be reduced any further.
+
+* Evaluation of symbols:
+
+ * The symbol is replaced by a value from the current *environment*.
+
+ * This is analogous to variable expansion in other languages.
+
+ * How do environments get their values? Defines and function application,
+ covered below.
+
+ * Certain symbols are *built in* and are automatically given values in the
+ top-level environment before the program starts.
+
+********************
+Function Application
+********************
+
+* Evaluation of lists:
+
+ * A list that starts with the symbols ``begin``, ``values``, ``if``,
+ ``lambda``, ``define``, ``define-macro``, or ``quote`` is a *special
+ form*, which are covered separately.
+
+ * Any other list represents a function application.
+
+* The subforms representing the list elements are evaluated first, left to
+ right.
+
+* If the first subform evaluates to a procedure
+
+* During application:
+
+ * A new environment is created, with the names of the arguments bound to
+ the values from the function application expression.
+
+ * The body of the function is run as a program, in this environment.
+
+ * The result of the last form in the function is the result of the function
+ application.
+
+*************
+Special Forms
+*************
+
+Lists that begin with one of the following symbols are evaluated specially.
+
+* ``begin``: A ``begin`` form evaluates a sequence of subforms, reducing to the
+ result of the last subform in the sequence. Example:
+
+ ::
+
+ (begin
+ ; define a function...
+ (define (f) 1)
+ ; ...and call it
+ (f))
+
+ The forms whose results are discarded are still evaluated for their side
+ effects.
+
+* ``values``: A ``values`` form evaluates a sequence of subforms, then reduces
+ to those values in the context of the containing form. This allows functions
+ to return multiple values. Example:
+
+ ::
+
+ (begin
+ (define (two x) (values x x))
+ (= (two 53)))
+
+ The ``two`` function returns two values, which are placed in the argument
+ positions for the ``=`` function. This program reduces to ``#t`` if run,
+ and defines ``two`` as a side effect.
+
+* ``if``: An ``if`` form must include a ``cond`` subform producing exactly one
+ value, and either one or two consequent subforms (named ``true`` and
+ ``false`` subforms in this document).
+
+ * The ``if`` form first evaluates the ``cond`` subform.
+
+ * If it evaluates to a true value (``#t``, a non-zero integer, a non-zero
+ decimal, a non-empty string, or a non-nil ``cons``), then the ``if``
+ form evaluates the ``true`` subform.
+
+ * If the ``cond`` subform produces a false value (any other value), then
+ the ``if`` form evaluates the ``false`` subform.
+
+ * If the ``if`` form does not have a ``false`` subform, the ``if`` form
+ evaluates to ``nil`` when the ``cond`` subform evaluates to a false
+ value.
+
+ * Examples: ``(if #t 1)`` (always equal to ``1``), ``(if some-var "okay"
+ "failure")``.
+
+* ``lambda``: A ``lambda`` form defines a procedure, and evaluates to a
+ procedure value which can be used to apply the newly-defined procedure.
+
+ * Must include a ``formals`` subform, which is generally a list of argument
+ names (as symbols).
+
+ * May include a sequence of body subforms, which are evaluated in order
+ whenever the function is applied.
+
+ * Functions capture the environment in effect when they are defined.
+ Symbols within the function body can refer to names defined in the
+ surrounding lexical context.
+
+ * Function bodies are evaluated in a new environment for each application,
+ with the symbols representing the arguments bound to the corresponding
+ values in the function application form.
+
+ * Examples:
+
+ ::
+
+ (lambda () 1)
+
+ This defines a constant function (which takes no arguments) whose
+ evaluation is always 1.
+
+ ::
+
+ (begin
+ (define x 5)
+ (lambda () x))
+
+ This defines a constant function whose evaluation is always the value of
+ ``x`` in the top-level environment (initially 5).
+
+ ::
+
+ (lambda (a b) (+ a b))
+
+ This defines a binary function (which takes two arguments) whose
+ evaluation is the sum of those arguments. This is a simple replacement
+ for the ``+`` function itself, but it illustrates the idea that functions
+ can include other functions.
+
+* ``define``: declares new bindings. This has two formats:
+
+ * ``(define symbol value)``: evaluates the ``value`` subform, and binds the
+ result to ``symbol`` in the current environment. Example:
+
+ ::
+
+ (begin
+ ; Bind x to a value
+ (define x 5)
+ ; Expands x in the same environment
+ x)
+
+ This program evaluates to ``5``.
+
+ * ``(define (name formals...) body...)``: defines a function and binds it
+ to ``name`` in the current environemnt.
+
+ This is expanded to an equivalent ``lambda`` form, within a ``define``
+ form binding the resulting procedure to ``name``. For example:
+
+ ::
+
+ (define (f a b) (+ a b))
+
+ is equivalent to
+
+ ::
+
+ (define f
+ (lambda (a b) (+ a b)))
+
+* ``define-macro``: This has the same syntaxes as the ``define`` form, but it
+ binds values to a special "macro table" which is used to transform code prior
+ to evaluation. Macros are described later in this document.
+
+* ``quote``: A ``quote`` form must have exactly one form in argument position.
+ It evaluates to exactly the argument form, without evaluating it. For example:
+
+::
+
+ (quote (+ 1 2))
+
+ evaluates to the list ``(+ 1 2)``. Quote forms are the easiest way to obtain
+ unevaluated symbols as values, and are an integral part of the Actinide macro
+ system.
+
+*******************
+Loops and Recursion
+*******************
+
+* To loop, a function must recurse. Actinide has no looping primitives other
+ than function application.
+
+* Actinide guarantees that functions that recurse in tail position, either
+ directly or indirectly, can recurse indefinitely.
+
+* What is tail position?
+
+ * Function bodies: the final form of the function is in tail position with
+ respect to the function.
+
+ * ``begin`` forms: the final subform is in tail position with respect to
+ the ``begin`` form.
+
+ * ``if`` forms: the ``true`` subform is in tail position with respect to
+ the ``if`` form if the ``cond`` subform reduces to a true value. The
+ ``false`` subform is in tail position with respect to the ``if`` form if
+ the ``cond`` subform reduces to a false value.
+
+ * If a form is in tail position with respect to its containing form, it is
+ in tail position with respect to *that* form's containing form, and so
+ on, out to the nearest ``lambda`` body or to the top level of the program.
+
+* Example:
+
+ * Simple recursive factorial:
+
+ ::
+
+ (define (factorial n)
+ (if (= n 1)
+ 1
+ (* n (factorial (- n 1)))))
+
+ The ``factorial`` function *is not* called in tail position with respect
+ to the body of the ``factorial`` function: After reducing that function
+ application, the reduction of the outer ``factorial`` application still
+ needs to apply the ``*`` function to the result.
+
+ Attempting to evaluate ``(factorial 1000)`` fails due to limits on call
+ depth: ``maximum recursion depth exceeded while calling a Python object``
+
+ ::
+
+ (define (fact n a)
+ (if (= n 1)
+ a
+ (fact (- n 1) (* n a))))
+
+ The ``fact`` function *is* called in tail position with respect to the
+ body of ``fact``. Specifically, it is in tail position with respect to
+ the ``if`` form whenever ``n`` is not equal to ``1``, and the ``if`` form
+ is in tail position with respect to the body of the ``fact`` function.
+
+ Evaluating ``(fact 1000 1)`` correctly computes the factorial of ``1000``
+ on any machine with enough memory to store the result.
+
+******
+Macros
+******
+
+* Before Actinide evaluates a program, it *expands* a program.
+
+* Expansion replaces macros (defined by ``define-macro``, as above).
+
+* A *macro* is an Actinide procedure, as with ``lambda``, which accepts forms
+ as arguments and reduces to a new form.
+
+* Macros can be used to define new syntax.
+
+* Macro expansion is recursive: the result of expanding a macro is expanded
+ again, which allows macros to produce macro forms.
+
+* Example: The ``let-one`` macro defines a single local variable, with a known
+ value, and evaluates a body form in a temporary environment with that
+ variable bound.
+
+::
+
+ (define-macro (let-one binding body)
+ (begin
+ (define name (head binding))
+ (define val (head (tail binding)))
+ `((lambda (,name) ,body) ,val))))
+
+ To use this macro, apply it as if it were a function:
+
+::
+
+ (let-one (x 1) x)
+
+ This program evaluates to 1, but *does not* bind ``x`` in the top-level
+ environment.
+
+TO WRITE:
+
+* Comprehensive intro to quote forms
+* Defining a simple macro
+* Applying a simple macro
diff --git a/README.rst b/README.rst
index b5e0b37..1773cd6 100644
--- a/README.rst
+++ b/README.rst
@@ -240,9 +240,3 @@ Actinide functions returne a tuple of results rather than a single value:
This two-way binding mechanism makes it straightforward to define interfaces
between Actinide and the target domain.
-
-*********************************
-The Actinide Programming Language
-*********************************
-
-WIP
diff --git a/actinide/__init__.py b/actinide/__init__.py
index b6ace49..dbd2b9b 100644
--- a/actinide/__init__.py
+++ b/actinide/__init__.py
@@ -14,8 +14,11 @@ class BaseSession(object):
port = ports.string_to_input_port(port)
return reader.read(port, self.symbols)
+ def expand(self, form):
+ return expander.expand(form, self.symbols, self.macros)
+
def eval(self, form):
- form = expander.expand(form, self.symbols, self.macros)
+ form = self.expand(form)
cps = evaluator.eval(form, self.symbols, None)
return evaluator.run(cps, self.environment, self.macros)
@@ -68,14 +71,12 @@ class BaseSession(object):
def eval(form):
return self.eval(form)
@self.bind_fn
- def expand(form):
- return expander.expand(form, self.symbols)
- @self.bind_fn
def symbol(val):
return types.symbol(val, self.symbols)
+ self.bind_fn(self.expand)
+ self.bind_fn(self.display)
self.bind_module(types)
self.bind_module(core)
- self.bind_fn(self.display)
def standard_library(self):
pass
diff --git a/actinide/evaluator.py b/actinide/evaluator.py
index 89878f8..45046a5 100644
--- a/actinide/evaluator.py
+++ b/actinide/evaluator.py
@@ -189,7 +189,7 @@ def eval(value, symbols, continuation):
return if_(t.tail(value), symbols, continuation)
if t.head(value) == symbols['define']:
return define(t.tail(value), symbols, continuation, bind)
- if t.head(value) == symbols['defmacro']:
+ if t.head(value) == symbols['define-macro']:
return define(t.tail(value), symbols, continuation, macro_bind)
if t.head(value) == symbols['lambda']:
return lambda_(t.tail(value), symbols, continuation)
diff --git a/actinide/expander.py b/actinide/expander.py
index a72a64e..e925c19 100644
--- a/actinide/expander.py
+++ b/actinide/expander.py
@@ -20,7 +20,7 @@ def expand(form, symbols, macros):
form = expand_if(form)
elif head(form) == symbols['define']:
form = expand_define(form, symbols)
- elif head(form) == symbols['defmacro']:
+ elif head(form) == symbols['define-macro']:
form = expand_define(form, symbols)
elif head(form) == symbols['lambda']:
form = expand_lambda(form, symbols)
@@ -56,7 +56,7 @@ def expand_if(form):
false, form = uncons(form)
return list(head, cond, true, false)
-# Expand a define or defmacro form.
+# Expand a define or define-macro form.
#
# (define (NAME FORMALS) BODY)
# => (define name (lambda FORMALS BODY))
diff --git a/primer.py b/primer.py
deleted file mode 100644
index 6954bea..0000000
--- a/primer.py
+++ /dev/null
@@ -1,10 +0,0 @@
-import actinide as a
-import actinide.types as t
-import actinide.expander as x
-
-s = a.Session()
-
-def expand(form):
- return x.expand(form, s.symbols, s.macros)
-
-s.macros[s.symbol('twice')] = lambda f: (t.list(f, f),)
diff --git a/tests/test_expander.py b/tests/test_expander.py
new file mode 100644
index 0000000..3e32d2c
--- /dev/null
+++ b/tests/test_expander.py
@@ -0,0 +1,36 @@
+import actinide
+
+def test_known_expansion():
+ s = actinide.Session()
+ s.run('''
+ (begin
+ (define-macro (let-one binding body)
+ (begin
+ (define name (head binding))
+ (define val (head (tail binding)))
+ `((lambda (,name) ,body) ,val))))
+ ''')
+ program = s.read('(let-one (x 1) x)')
+ assert s.symbol('x') not in s.environment
+ assert (1,) == s.eval(program)
+
+def test_quasiquote_expansion():
+ s = actinide.Session()
+
+ program = s.read('`(a ,b c)`')
+ expansion = s.expand(program)
+ assert s.read("(cons 'a (cons b (cons 'c ())))") == expansion
+
+def test_nested_qq_expansion():
+ s = actinide.Session()
+
+ program = s.read('`((,a))`')
+ expansion = s.expand(program)
+ assert s.read("(cons (cons a ()) ())") == expansion
+
+def test_shorter_qq_expansion():
+ s = actinide.Session()
+
+ program = s.read('`(,a b)`')
+ expansion = s.expand(program)
+ assert s.read("(cons a (cons 'b ()))") == expansion