diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,3 +1,7 @@
+## symantic-parser-0.0.0.20210102
+
+* Add missing golden tests in the Cabal tarball.
+
 ## symantic-parser-0.0.0.20210101
 
 * Initial (pre-alpha) release, on the unsuspecting world at sleep.
diff --git a/symantic-parser.cabal b/symantic-parser.cabal
--- a/symantic-parser.cabal
+++ b/symantic-parser.cabal
@@ -1,6 +1,6 @@
-cabal-version: 2.2
+cabal-version: 2.4
 name: symantic-parser
-version: 0.0.0.20210101
+version: 0.0.0.20210102
 synopsis: Parser combinators statically optimized and staged via typed meta-programming
 description:
   This is a work-in-progress experimental library to generate parsers,
@@ -30,6 +30,8 @@
   default.nix
   flake.nix
   shell.nix
+  test/Golden/**/*.dump
+  test/Golden/**/*.txt
 extra-tmp-files:
 build-type: Simple
 tested-with: GHC==9.0.0
diff --git a/test/Golden/Grammar/app.dump b/test/Golden/Grammar/app.dump
new file mode 100644
--- /dev/null
+++ b/test/Golden/Grammar/app.dump
@@ -0,0 +1,3 @@
+<*>
++ pure Haskell
+` pure ()
diff --git a/test/Golden/Grammar/app.opt.dump b/test/Golden/Grammar/app.opt.dump
new file mode 100644
--- /dev/null
+++ b/test/Golden/Grammar/app.opt.dump
@@ -0,0 +1,1 @@
+pure (Haskell ())
diff --git a/test/Golden/Grammar/boom.dump b/test/Golden/Grammar/boom.dump
new file mode 100644
--- /dev/null
+++ b/test/Golden/Grammar/boom.dump
@@ -0,0 +1,46 @@
+<*>
++ <*>
+| + <*>
+| | + pure const
+| | ` pure id
+| ` <*>
+|   + <*>
+|   | + def name_5
+|   | | ` <*>
+|   | |   + pure const
+|   | |   ` pure id
+|   | ` def name_7
+|   |   ` <*>
+|   |     + <*>
+|   |     | + def name_1
+|   |     | | ` <*>
+|   |     | |   + pure const
+|   |     | |   ` pure id
+|   |     | ` def name_3
+|   |     |   ` <*>
+|   |     |     + <*>
+|   |     |     | + <*>
+|   |     |     | | + pure const
+|   |     |     | | ` pure id
+|   |     |     | ` rec name_7
+|   |     |     ` rec name_3
+|   |     ` rec name_7
+|   ` def name_2
+|     ` pure ()
+` <*>
+  + <*>
+  | + ref name_5
+  | ` def name_4
+  |   ` <*>
+  |     + <*>
+  |     | + ref name_1
+  |     | ` def name_6
+  |     |   ` <*>
+  |     |     + <*>
+  |     |     | + <*>
+  |     |     | | + pure const
+  |     |     | | ` pure id
+  |     |     | ` rec name_4
+  |     |     ` rec name_6
+  |     ` rec name_4
+  ` ref name_2
diff --git a/test/Golden/Grammar/boom.opt.dump b/test/Golden/Grammar/boom.opt.dump
new file mode 100644
--- /dev/null
+++ b/test/Golden/Grammar/boom.opt.dump
@@ -0,0 +1,36 @@
+<*>
++ <*>
+| + <*>
+| | + <*>
+| | | + <*>
+| | | | + <*>
+| | | | | + pure ((.) ((.) (.)) . ((.) ((.) (.)) . (.) ((.) (const id))))
+| | | | | ` def name_2
+| | | | |   ` pure (const id)
+| | | | ` def name_4
+| | | |   ` <*>
+| | | |     + <*>
+| | | |     | + def name_5
+| | | |     | | ` pure (const id)
+| | | |     | ` def name_7
+| | | |     |   ` <*>
+| | | |     |     + <*>
+| | | |     |     | + pure (const id)
+| | | |     |     | ` rec name_4
+| | | |     |     ` rec name_7
+| | | |     ` rec name_4
+| | | ` def name_6
+| | |   ` pure ()
+| | ` ref name_2
+| ` def name_1
+|   ` <*>
+|     + <*>
+|     | + ref name_5
+|     | ` def name_3
+|     |   ` <*>
+|     |     + <*>
+|     |     | + pure (const id)
+|     |     | ` rec name_1
+|     |     ` rec name_3
+|     ` rec name_1
+` ref name_6
diff --git a/test/Golden/Grammar/brainfuck.dump b/test/Golden/Grammar/brainfuck.dump
new file mode 100644
--- /dev/null
+++ b/test/Golden/Grammar/brainfuck.dump
@@ -0,0 +1,140 @@
+<*>
++ <*>
+| + <*>
+| | + pure const
+| | ` pure id
+| ` <*>
+|   + <*>
+|   | + <*>
+|   | | + pure const
+|   | | ` pure id
+|   | ` <*>
+|   |   + <*>
+|   |   | + pure (flip ($))
+|   |   | ` def name_6
+|   |   |   ` pure ()
+|   |   ` def name_8
+|   |     ` <|>
+|   |       + <*>
+|   |       | + <*>
+|   |       | | + pure (.)
+|   |       | | ` <*>
+|   |       | |   + def name_2
+|   |       | |   | ` <*>
+|   |       | |   |   + pure flip
+|   |       | |   |   ` pure const
+|   |       | |   ` def name_1
+|   |       | |     ` satisfy
+|   |       | ` rec name_8
+|   |       ` pure id
+|   ` ref name_6
+` def name_4
+  ` <*>
+    + def name_5
+    | ` <|>
+    |   + <*>
+    |   | + <*>
+    |   | | + pure (.)
+    |   | | ` <*>
+    |   | |   + pure cons
+    |   | |   ` <*>
+    |   | |     + <*>
+    |   | |     | + pure const
+    |   | |     | ` conditional
+    |   | |     |   + bs
+    |   | |     |   | + <*>
+    |   | |     |   | | + <*>
+    |   | |     |   | | | + pure const
+    |   | |     |   | | | ` pure Haskell
+    |   | |     |   | | ` ref name_1
+    |   | |     |   | + <*>
+    |   | |     |   | | + <*>
+    |   | |     |   | | | + pure const
+    |   | |     |   | | | ` pure Haskell
+    |   | |     |   | | ` ref name_1
+    |   | |     |   | + <*>
+    |   | |     |   | | + <*>
+    |   | |     |   | | | + pure const
+    |   | |     |   | | | ` pure Haskell
+    |   | |     |   | | ` ref name_1
+    |   | |     |   | + <*>
+    |   | |     |   | | + <*>
+    |   | |     |   | | | + pure const
+    |   | |     |   | | | ` pure Haskell
+    |   | |     |   | | ` ref name_1
+    |   | |     |   | + <*>
+    |   | |     |   | | + <*>
+    |   | |     |   | | | + pure const
+    |   | |     |   | | | ` pure Haskell
+    |   | |     |   | | ` ref name_1
+    |   | |     |   | + <*>
+    |   | |     |   | | + <*>
+    |   | |     |   | | | + pure const
+    |   | |     |   | | | ` pure Haskell
+    |   | |     |   | | ` ref name_1
+    |   | |     |   | ` <*>
+    |   | |     |   |   + <*>
+    |   | |     |   |   | + pure const
+    |   | |     |   |   | ` <*>
+    |   | |     |   |   |   + <*>
+    |   | |     |   |   |   | + <*>
+    |   | |     |   |   |   | | + pure const
+    |   | |     |   |   |   | | ` pure id
+    |   | |     |   |   |   | ` <*>
+    |   | |     |   |   |   |   + <*>
+    |   | |     |   |   |   |   | + pure const
+    |   | |     |   |   |   |   | ` ref name_1
+    |   | |     |   |   |   |   ` <*>
+    |   | |     |   |   |   |     + <*>
+    |   | |     |   |   |   |     | + <*>
+    |   | |     |   |   |   |     | | + pure const
+    |   | |     |   |   |   |     | | ` pure id
+    |   | |     |   |   |   |     | ` <*>
+    |   | |     |   |   |   |     |   + <*>
+    |   | |     |   |   |   |     |   | + pure (flip ($))
+    |   | |     |   |   |   |     |   | ` ref name_6
+    |   | |     |   |   |   |     |   ` def name_7
+    |   | |     |   |   |   |     |     ` <|>
+    |   | |     |   |   |   |     |       + <*>
+    |   | |     |   |   |   |     |       | + <*>
+    |   | |     |   |   |   |     |       | | + pure (.)
+    |   | |     |   |   |   |     |       | | ` <*>
+    |   | |     |   |   |   |     |       | |   + ref name_2
+    |   | |     |   |   |   |     |       | |   ` ref name_1
+    |   | |     |   |   |   |     |       | ` rec name_7
+    |   | |     |   |   |   |     |       ` pure id
+    |   | |     |   |   |   |     ` ref name_6
+    |   | |     |   |   |   ` <*>
+    |   | |     |   |   |     + pure Haskell
+    |   | |     |   |   |     ` rec name_4
+    |   | |     |   |   ` <*>
+    |   | |     |   |     + <*>
+    |   | |     |   |     | + pure const
+    |   | |     |   |     | ` pure Haskell
+    |   | |     |   |     ` ref name_1
+    |   | |     |   + look
+    |   | |     |   | ` ref name_1
+    |   | |     |   ` empty
+    |   | |     ` <*>
+    |   | |       + <*>
+    |   | |       | + <*>
+    |   | |       | | + pure const
+    |   | |       | | ` pure id
+    |   | |       | ` <*>
+    |   | |       |   + <*>
+    |   | |       |   | + pure (flip ($))
+    |   | |       |   | ` ref name_6
+    |   | |       |   ` def name_3
+    |   | |       |     ` <|>
+    |   | |       |       + <*>
+    |   | |       |       | + <*>
+    |   | |       |       | | + pure (.)
+    |   | |       |       | | ` <*>
+    |   | |       |       | |   + ref name_2
+    |   | |       |       | |   ` ref name_1
+    |   | |       |       | ` rec name_3
+    |   | |       |       ` pure id
+    |   | |       ` ref name_6
+    |   | ` rec name_5
+    |   ` pure id
+    ` pure Haskell
diff --git a/test/Golden/Grammar/brainfuck.opt.dump b/test/Golden/Grammar/brainfuck.opt.dump
new file mode 100644
--- /dev/null
+++ b/test/Golden/Grammar/brainfuck.opt.dump
@@ -0,0 +1,87 @@
+<*>
++ <*>
+| + <*>
+| | + <*>
+| | | + pure ((.) ((.) (const id)) . ((.) (const id) . flip ($)))
+| | | ` def name_4
+| | |   ` pure ()
+| | ` def name_6
+| |   ` <|>
+| |     + <*>
+| |     | + <*>
+| |     | | + <*>
+| |     | | | + pure ((.) (.))
+| |     | | | ` def name_7
+| |     | | |   ` pure (flip const)
+| |     | | ` satisfy
+| |     | ` rec name_6
+| |     ` pure id
+| ` ref name_4
+` def name_2
+  ` <*>
+    + pure ((flip ($)) Haskell)
+    ` def name_3
+      ` <|>
+        + <*>
+        | + <*>
+        | | + <*>
+        | | | + <*>
+        | | | | + conditional
+        | | | | | + bs
+        | | | | | | + <*>
+        | | | | | | | + pure ((.) ((.) ((.) (.))) . ((.) ((.) ((.) cons)) . ((flip ($)) ((.) (const id) . flip ($)) . ((.) . ((.) . ((.) . (const . const Haskell)))))))
+        | | | | | | | ` satisfy
+        | | | | | | + <*>
+        | | | | | | | + pure ((.) ((.) ((.) (.))) . ((.) ((.) ((.) cons)) . ((flip ($)) ((.) (const id) . flip ($)) . ((.) . ((.) . ((.) . (const . const Haskell)))))))
+        | | | | | | | ` satisfy
+        | | | | | | + <*>
+        | | | | | | | + pure ((.) ((.) ((.) (.))) . ((.) ((.) ((.) cons)) . ((flip ($)) ((.) (const id) . flip ($)) . ((.) . ((.) . ((.) . (const . const Haskell)))))))
+        | | | | | | | ` satisfy
+        | | | | | | + <*>
+        | | | | | | | + pure ((.) ((.) ((.) (.))) . ((.) ((.) ((.) cons)) . ((flip ($)) ((.) (const id) . flip ($)) . ((.) . ((.) . ((.) . (const . const Haskell)))))))
+        | | | | | | | ` satisfy
+        | | | | | | + <*>
+        | | | | | | | + pure ((.) ((.) ((.) (.))) . ((.) ((.) ((.) cons)) . ((flip ($)) ((.) (const id) . flip ($)) . ((.) . ((.) . ((.) . (const . const Haskell)))))))
+        | | | | | | | ` satisfy
+        | | | | | | + <*>
+        | | | | | | | + pure ((.) ((.) ((.) (.))) . ((.) ((.) ((.) cons)) . ((flip ($)) ((.) (const id) . flip ($)) . ((.) . ((.) . ((.) . (const . const Haskell)))))))
+        | | | | | | | ` satisfy
+        | | | | | | ` <*>
+        | | | | | |   + <*>
+        | | | | | |   | + <*>
+        | | | | | |   | | + <*>
+        | | | | | |   | | | + <*>
+        | | | | | |   | | | | + <*>
+        | | | | | |   | | | | | + pure ((.) ((.) ((.) ((.) ((.) ((.) ((.) ((.) (.)))))))) . ((.) ((.) ((.) ((.) ((.) ((.) ((.) ((.) cons))))))) . ((.) ((.) ((.) ((.) ((.) ((flip ($)) ((.) (const id) . flip ($))))))) . ((.) ((.) ((.) ((.) ((.) (.))))) . ((.) ((.) ((.) ((.) ((.) (.))))) . ((.) ((.) ((.) ((.) ((.) (.))))) . ((.) ((.) ((.) ((.) ((.) const)))) . ((.) ((.) ((.) ((.) ((flip ($)) (const Haskell))))) . ((.) ((.) ((.) ((.) (.)))) . ((.) ((.) ((.) ((.) const))) . ((.) ((.) ((.) ((flip ($)) Haskell))) . ((.) ((.) ((.) (.))) . ((.) ((.) ((.) (const id))) . ((flip ($)) ((.) (const id) . flip ($)) . ((.) . ((.) . ((.) . const)))))))))))))))))
+        | | | | | |   | | | | | ` satisfy
+        | | | | | |   | | | | ` ref name_4
+        | | | | | |   | | | ` def name_1
+        | | | | | |   | | |   ` <|>
+        | | | | | |   | | |     + <*>
+        | | | | | |   | | |     | + <*>
+        | | | | | |   | | |     | | + <*>
+        | | | | | |   | | |     | | | + pure ((.) (.))
+        | | | | | |   | | |     | | | ` ref name_7
+        | | | | | |   | | |     | | ` satisfy
+        | | | | | |   | | |     | ` rec name_1
+        | | | | | |   | | |     ` pure id
+        | | | | | |   | | ` ref name_4
+        | | | | | |   | ` rec name_2
+        | | | | | |   ` satisfy
+        | | | | | + look
+        | | | | | | ` satisfy
+        | | | | | ` empty
+        | | | | ` ref name_4
+        | | | ` def name_5
+        | | |   ` <|>
+        | | |     + <*>
+        | | |     | + <*>
+        | | |     | | + <*>
+        | | |     | | | + pure ((.) (.))
+        | | |     | | | ` ref name_7
+        | | |     | | ` satisfy
+        | | |     | ` rec name_5
+        | | |     ` pure id
+        | | ` ref name_4
+        | ` rec name_3
+        ` pure id
diff --git a/test/Golden/Grammar/eof.dump b/test/Golden/Grammar/eof.dump
new file mode 100644
--- /dev/null
+++ b/test/Golden/Grammar/eof.dump
@@ -0,0 +1,1 @@
+eof
diff --git a/test/Golden/Grammar/eof.opt.dump b/test/Golden/Grammar/eof.opt.dump
new file mode 100644
--- /dev/null
+++ b/test/Golden/Grammar/eof.opt.dump
@@ -0,0 +1,1 @@
+eof
diff --git a/test/Golden/Grammar/many-a.dump b/test/Golden/Grammar/many-a.dump
new file mode 100644
--- /dev/null
+++ b/test/Golden/Grammar/many-a.dump
@@ -0,0 +1,16 @@
+<*>
++ def name_1
+| ` <|>
+|   + <*>
+|   | + <*>
+|   | | + pure (.)
+|   | | ` <*>
+|   | |   + pure cons
+|   | |   ` <*>
+|   | |     + <*>
+|   | |     | + pure const
+|   | |     | ` pure Haskell
+|   | |     ` satisfy
+|   | ` rec name_1
+|   ` pure id
+` pure Haskell
diff --git a/test/Golden/Grammar/many-a.opt.dump b/test/Golden/Grammar/many-a.opt.dump
new file mode 100644
--- /dev/null
+++ b/test/Golden/Grammar/many-a.opt.dump
@@ -0,0 +1,10 @@
+<*>
++ pure ((flip ($)) Haskell)
+` def name_1
+  ` <|>
+    + <*>
+    | + <*>
+    | | + pure ((.) . (cons . const Haskell))
+    | | ` satisfy
+    | ` rec name_1
+    ` pure id
diff --git a/test/Golden/Grammar/many-char-eof.dump b/test/Golden/Grammar/many-char-eof.dump
new file mode 100644
--- /dev/null
+++ b/test/Golden/Grammar/many-char-eof.dump
@@ -0,0 +1,20 @@
+<*>
++ <*>
+| + pure const
+| ` <*>
+|   + def name_1
+|   | ` <|>
+|   |   + <*>
+|   |   | + <*>
+|   |   | | + pure (.)
+|   |   | | ` <*>
+|   |   | |   + pure cons
+|   |   | |   ` <*>
+|   |   | |     + <*>
+|   |   | |     | + pure const
+|   |   | |     | ` pure Haskell
+|   |   | |     ` satisfy
+|   |   | ` rec name_1
+|   |   ` pure id
+|   ` pure Haskell
+` eof
diff --git a/test/Golden/Grammar/many-char-eof.opt.dump b/test/Golden/Grammar/many-char-eof.opt.dump
new file mode 100644
--- /dev/null
+++ b/test/Golden/Grammar/many-char-eof.opt.dump
@@ -0,0 +1,12 @@
+<*>
++ <*>
+| + pure (const . (flip ($)) Haskell)
+| ` def name_1
+|   ` <|>
+|     + <*>
+|     | + <*>
+|     | | + pure ((.) . (cons . const Haskell))
+|     | | ` satisfy
+|     | ` rec name_1
+|     ` pure id
+` eof
diff --git a/test/Golden/Grammar/many-char-fail.dump b/test/Golden/Grammar/many-char-fail.dump
new file mode 100644
--- /dev/null
+++ b/test/Golden/Grammar/many-char-fail.dump
@@ -0,0 +1,25 @@
+<*>
++ <*>
+| + pure const
+| ` <*>
+|   + def name_2
+|   | ` <|>
+|   |   + <*>
+|   |   | + <*>
+|   |   | | + pure (.)
+|   |   | | ` <*>
+|   |   | |   + pure cons
+|   |   | |   ` <*>
+|   |   | |     + <*>
+|   |   | |     | + pure const
+|   |   | |     | ` pure Haskell
+|   |   | |     ` def name_1
+|   |   | |       ` satisfy
+|   |   | ` rec name_2
+|   |   ` pure id
+|   ` pure Haskell
+` <*>
+  + <*>
+  | + pure const
+  | ` pure Haskell
+  ` ref name_1
diff --git a/test/Golden/Grammar/many-char-fail.opt.dump b/test/Golden/Grammar/many-char-fail.opt.dump
new file mode 100644
--- /dev/null
+++ b/test/Golden/Grammar/many-char-fail.opt.dump
@@ -0,0 +1,12 @@
+<*>
++ <*>
+| + pure ((flip ($)) (const Haskell) . ((.) . (const . (flip ($)) Haskell)))
+| ` def name_1
+|   ` <|>
+|     + <*>
+|     | + <*>
+|     | | + pure ((.) . (cons . const Haskell))
+|     | | ` satisfy
+|     | ` rec name_1
+|     ` pure id
+` satisfy
diff --git a/test/Golden/Grammar/unit-unit.dump b/test/Golden/Grammar/unit-unit.dump
new file mode 100644
--- /dev/null
+++ b/test/Golden/Grammar/unit-unit.dump
@@ -0,0 +1,8 @@
+<*>
++ <*>
+| + <*>
+| | + pure const
+| | ` pure id
+| ` def name_1
+|   ` pure ()
+` ref name_1
diff --git a/test/Golden/Grammar/unit-unit.opt.dump b/test/Golden/Grammar/unit-unit.opt.dump
new file mode 100644
--- /dev/null
+++ b/test/Golden/Grammar/unit-unit.opt.dump
@@ -0,0 +1,6 @@
+<*>
++ <*>
+| + pure (const id)
+| ` def name_1
+|   ` pure ()
+` ref name_1
diff --git a/test/Golden/Grammar/unit.dump b/test/Golden/Grammar/unit.dump
new file mode 100644
--- /dev/null
+++ b/test/Golden/Grammar/unit.dump
@@ -0,0 +1,1 @@
+pure ()
diff --git a/test/Golden/Grammar/unit.opt.dump b/test/Golden/Grammar/unit.opt.dump
new file mode 100644
--- /dev/null
+++ b/test/Golden/Grammar/unit.opt.dump
@@ -0,0 +1,1 @@
+pure ()
diff --git a/test/Golden/Machine/a-or-b.dump b/test/Golden/Machine/a-or-b.dump
new file mode 100644
--- /dev/null
+++ b/test/Golden/Machine/a-or-b.dump
@@ -0,0 +1,18 @@
+catchFail
+  <try>
+  | push (const Haskell)
+  | read
+  | lift ($)
+  | popFail
+  | ret
+  <handler>
+    pushInput
+    lift InstrPureSameOffset
+    choices [id]
+      <branch>
+      | push (const Haskell)
+      | read
+      | lift ($)
+      | ret
+      <default>
+        fail
diff --git a/test/Golden/Machine/app.dump b/test/Golden/Machine/app.dump
new file mode 100644
--- /dev/null
+++ b/test/Golden/Machine/app.dump
@@ -0,0 +1,2 @@
+push (Haskell ())
+ret
diff --git a/test/Golden/Machine/boom.dump b/test/Golden/Machine/boom.dump
new file mode 100644
--- /dev/null
+++ b/test/Golden/Machine/boom.dump
@@ -0,0 +1,51 @@
+push ((.) ((.) (.)) . ((.) ((.) (.)) . (.) ((.) (const id))))
+name_2:
+| push (const id)
+| ret
+call name_2
+lift ($)
+name_5:
+| name_6:
+| | push (const id)
+| | ret
+| call name_6
+| name_7:
+| | push (const id)
+| | call name_5
+| | lift ($)
+| | call name_7
+| | lift ($)
+| | ret
+| call name_7
+| lift ($)
+| call name_5
+| lift ($)
+| ret
+call name_5
+lift ($)
+name_3:
+| push ()
+| ret
+call name_3
+lift ($)
+call name_2
+lift ($)
+name_1:
+| call name_6
+| name_4:
+| | push (const id)
+| | call name_1
+| | lift ($)
+| | call name_4
+| | lift ($)
+| | ret
+| call name_4
+| lift ($)
+| call name_1
+| lift ($)
+| ret
+call name_1
+lift ($)
+call name_3
+lift ($)
+ret
diff --git a/test/Golden/Machine/brainfuck.dump b/test/Golden/Machine/brainfuck.dump
new file mode 100644
--- /dev/null
+++ b/test/Golden/Machine/brainfuck.dump
@@ -0,0 +1,159 @@
+push ((.) ((.) (const id)) . ((.) (const id) . flip ($)))
+name_2:
+| push ()
+| ret
+call name_2
+lift ($)
+name_3:
+| catchFail
+|   <try>
+|   | push ((.) (.))
+|   | name_4:
+|   | | push (flip const)
+|   | | ret
+|   | call name_4
+|   | lift ($)
+|   | read
+|   | lift ($)
+|   | call name_3
+|   | lift ($)
+|   | popFail
+|   | ret
+|   <handler>
+|     pushInput
+|     lift InstrPureSameOffset
+|     choices [id]
+|       <branch>
+|       | push id
+|       | ret
+|       <default>
+|         fail
+call name_3
+lift ($)
+call name_2
+lift ($)
+name_7:
+| push ((flip ($)) Haskell)
+| name_1:
+| | catchFail
+| |   <try>
+| |   | join_55:
+| |   | | call name_2
+| |   | | lift ($)
+| |   | | name_6:
+| |   | | | catchFail
+| |   | | |   <try>
+| |   | | |   | push ((.) (.))
+| |   | | |   | call name_4
+| |   | | |   | lift ($)
+| |   | | |   | read
+| |   | | |   | lift ($)
+| |   | | |   | call name_6
+| |   | | |   | lift ($)
+| |   | | |   | popFail
+| |   | | |   | ret
+| |   | | |   <handler>
+| |   | | |     pushInput
+| |   | | |     lift InstrPureSameOffset
+| |   | | |     choices [id]
+| |   | | |       <branch>
+| |   | | |       | push id
+| |   | | |       | ret
+| |   | | |       <default>
+| |   | | |         fail
+| |   | | call name_6
+| |   | | lift ($)
+| |   | | call name_2
+| |   | | lift ($)
+| |   | | call name_1
+| |   | | lift ($)
+| |   | | popFail
+| |   | | ret
+| |   | pushInput
+| |   | read
+| |   | swap
+| |   | loadInput
+| |   | choices [(== Haskell),(== Haskell),(== Haskell),(== Haskell),(== Haskell),(== Haskell),(== Haskell)]
+| |   |   <branch>
+| |   |   | push ((.) ((.) ((.) (.))) . ((.) ((.) ((.) cons)) . ((flip ($)) ((.) (const id) . flip ($)) . ((.) . ((.) . ((.) . (const . const Haskell)))))))
+| |   |   | read
+| |   |   | lift ($)
+| |   |   | refJoin join_55
+| |   |   <branch>
+| |   |   | push ((.) ((.) ((.) (.))) . ((.) ((.) ((.) cons)) . ((flip ($)) ((.) (const id) . flip ($)) . ((.) . ((.) . ((.) . (const . const Haskell)))))))
+| |   |   | read
+| |   |   | lift ($)
+| |   |   | refJoin join_55
+| |   |   <branch>
+| |   |   | push ((.) ((.) ((.) (.))) . ((.) ((.) ((.) cons)) . ((flip ($)) ((.) (const id) . flip ($)) . ((.) . ((.) . ((.) . (const . const Haskell)))))))
+| |   |   | read
+| |   |   | lift ($)
+| |   |   | refJoin join_55
+| |   |   <branch>
+| |   |   | push ((.) ((.) ((.) (.))) . ((.) ((.) ((.) cons)) . ((flip ($)) ((.) (const id) . flip ($)) . ((.) . ((.) . ((.) . (const . const Haskell)))))))
+| |   |   | read
+| |   |   | lift ($)
+| |   |   | refJoin join_55
+| |   |   <branch>
+| |   |   | push ((.) ((.) ((.) (.))) . ((.) ((.) ((.) cons)) . ((flip ($)) ((.) (const id) . flip ($)) . ((.) . ((.) . ((.) . (const . const Haskell)))))))
+| |   |   | read
+| |   |   | lift ($)
+| |   |   | refJoin join_55
+| |   |   <branch>
+| |   |   | push ((.) ((.) ((.) (.))) . ((.) ((.) ((.) cons)) . ((flip ($)) ((.) (const id) . flip ($)) . ((.) . ((.) . ((.) . (const . const Haskell)))))))
+| |   |   | read
+| |   |   | lift ($)
+| |   |   | refJoin join_55
+| |   |   <branch>
+| |   |   | push ((.) ((.) ((.) ((.) ((.) ((.) ((.) ((.) (.)))))))) . ((.) ((.) ((.) ((.) ((.) ((.) ((.) ((.) cons))))))) . ((.) ((.) ((.) ((.) ((.) ((flip ($)) ((.) (const id) . flip ($))))))) . ((.) ((.) ((.) ((.) ((.) (.))))) . ((.) ((.) ((.) ((.) ((.) (.))))) . ((.) ((.) ((.) ((.) ((.) (.))))) . ((.) ((.) ((.) ((.) ((.) const)))) . ((.) ((.) ((.) ((.) ((flip ($)) (const Haskell))))) . ((.) ((.) ((.) ((.) (.)))) . ((.) ((.) ((.) ((.) const))) . ((.) ((.) ((.) ((flip ($)) Haskell))) . ((.) ((.) ((.) (.))) . ((.) ((.) ((.) (const id))) . ((flip ($)) ((.) (const id) . flip ($)) . ((.) . ((.) . ((.) . const)))))))))))))))))
+| |   |   | read
+| |   |   | lift ($)
+| |   |   | call name_2
+| |   |   | lift ($)
+| |   |   | name_5:
+| |   |   | | catchFail
+| |   |   | |   <try>
+| |   |   | |   | push ((.) (.))
+| |   |   | |   | call name_4
+| |   |   | |   | lift ($)
+| |   |   | |   | read
+| |   |   | |   | lift ($)
+| |   |   | |   | call name_5
+| |   |   | |   | lift ($)
+| |   |   | |   | popFail
+| |   |   | |   | ret
+| |   |   | |   <handler>
+| |   |   | |     pushInput
+| |   |   | |     lift InstrPureSameOffset
+| |   |   | |     choices [id]
+| |   |   | |       <branch>
+| |   |   | |       | push id
+| |   |   | |       | ret
+| |   |   | |       <default>
+| |   |   | |         fail
+| |   |   | call name_5
+| |   |   | lift ($)
+| |   |   | call name_2
+| |   |   | lift ($)
+| |   |   | call name_7
+| |   |   | lift ($)
+| |   |   | read
+| |   |   | lift ($)
+| |   |   | refJoin join_55
+| |   |   <default>
+| |   |     fail
+| |   <handler>
+| |     pushInput
+| |     lift InstrPureSameOffset
+| |     choices [id]
+| |       <branch>
+| |       | push id
+| |       | ret
+| |       <default>
+| |         fail
+| call name_1
+| lift ($)
+| ret
+call name_7
+lift ($)
+ret
diff --git a/test/Golden/Machine/eof.dump b/test/Golden/Machine/eof.dump
new file mode 100644
--- /dev/null
+++ b/test/Golden/Machine/eof.dump
@@ -0,0 +1,23 @@
+catchFail
+  <try>
+  | catchFail
+  |   <try>
+  |   | pushInput
+  |   | read
+  |   | pop
+  |   | popFail
+  |   | loadInput
+  |   | fail
+  |   <handler>
+  |     loadInput
+  |     push ()
+  |     popFail
+  |     ret
+  <handler>
+    pushInput
+    lift InstrPureSameOffset
+    choices [id]
+      <branch>
+      | fail
+      <default>
+        fail
diff --git a/test/Golden/Machine/many-a.dump b/test/Golden/Machine/many-a.dump
new file mode 100644
--- /dev/null
+++ b/test/Golden/Machine/many-a.dump
@@ -0,0 +1,23 @@
+push ((flip ($)) Haskell)
+name_1:
+| catchFail
+|   <try>
+|   | push ((.) . (cons . const Haskell))
+|   | read
+|   | lift ($)
+|   | call name_1
+|   | lift ($)
+|   | popFail
+|   | ret
+|   <handler>
+|     pushInput
+|     lift InstrPureSameOffset
+|     choices [id]
+|       <branch>
+|       | push id
+|       | ret
+|       <default>
+|         fail
+call name_1
+lift ($)
+ret
diff --git a/test/Golden/Machine/many-char-eof.dump b/test/Golden/Machine/many-char-eof.dump
new file mode 100644
--- /dev/null
+++ b/test/Golden/Machine/many-char-eof.dump
@@ -0,0 +1,48 @@
+push (const . (flip ($)) Haskell)
+name_1:
+| catchFail
+|   <try>
+|   | push ((.) . (cons . const Haskell))
+|   | read
+|   | lift ($)
+|   | call name_1
+|   | lift ($)
+|   | popFail
+|   | ret
+|   <handler>
+|     pushInput
+|     lift InstrPureSameOffset
+|     choices [id]
+|       <branch>
+|       | push id
+|       | ret
+|       <default>
+|         fail
+call name_1
+lift ($)
+join_55:
+| lift ($)
+| ret
+catchFail
+  <try>
+  | catchFail
+  |   <try>
+  |   | pushInput
+  |   | read
+  |   | pop
+  |   | popFail
+  |   | loadInput
+  |   | fail
+  |   <handler>
+  |     loadInput
+  |     push ()
+  |     popFail
+  |     refJoin join_55
+  <handler>
+    pushInput
+    lift InstrPureSameOffset
+    choices [id]
+      <branch>
+      | fail
+      <default>
+        fail
diff --git a/test/Golden/Machine/many-char-fail.dump b/test/Golden/Machine/many-char-fail.dump
new file mode 100644
--- /dev/null
+++ b/test/Golden/Machine/many-char-fail.dump
@@ -0,0 +1,25 @@
+push ((flip ($)) (const Haskell) . ((.) . (const . (flip ($)) Haskell)))
+name_1:
+| catchFail
+|   <try>
+|   | push ((.) . (cons . const Haskell))
+|   | read
+|   | lift ($)
+|   | call name_1
+|   | lift ($)
+|   | popFail
+|   | ret
+|   <handler>
+|     pushInput
+|     lift InstrPureSameOffset
+|     choices [id]
+|       <branch>
+|       | push id
+|       | ret
+|       <default>
+|         fail
+call name_1
+lift ($)
+read
+lift ($)
+ret
diff --git a/test/Golden/Machine/unit-unit.dump b/test/Golden/Machine/unit-unit.dump
new file mode 100644
--- /dev/null
+++ b/test/Golden/Machine/unit-unit.dump
@@ -0,0 +1,9 @@
+push (const id)
+name_1:
+| push ()
+| ret
+call name_1
+lift ($)
+call name_1
+lift ($)
+ret
diff --git a/test/Golden/Machine/unit.dump b/test/Golden/Machine/unit.dump
new file mode 100644
--- /dev/null
+++ b/test/Golden/Machine/unit.dump
@@ -0,0 +1,2 @@
+push ()
+ret
diff --git a/test/Golden/Parser/alt-char-fail.dump b/test/Golden/Parser/alt-char-fail.dump
new file mode 100644
--- /dev/null
+++ b/test/Golden/Parser/alt-char-fail.dump
@@ -0,0 +1,1 @@
+ParsingErrorStandard {parsingErrorOffset = 0, parsingErrorUnexpected = Just 'c', parsingErrorExpecting = fromList [ErrorItemToken 'a',ErrorItemToken 'b']}
diff --git a/test/Golden/Parser/alt-char-fail.txt b/test/Golden/Parser/alt-char-fail.txt
new file mode 100644
--- /dev/null
+++ b/test/Golden/Parser/alt-char-fail.txt
@@ -0,0 +1,1 @@
+c
diff --git a/test/Golden/Parser/alt-char-try-fail.txt b/test/Golden/Parser/alt-char-try-fail.txt
new file mode 100644
--- /dev/null
+++ b/test/Golden/Parser/alt-char-try-fail.txt
@@ -0,0 +1,1 @@
+c
diff --git a/test/Golden/Parser/alt-left.dump b/test/Golden/Parser/alt-left.dump
new file mode 100644
--- /dev/null
+++ b/test/Golden/Parser/alt-left.dump
@@ -0,0 +1,1 @@
+"aa"
diff --git a/test/Golden/Parser/alt-left.txt b/test/Golden/Parser/alt-left.txt
new file mode 100644
--- /dev/null
+++ b/test/Golden/Parser/alt-left.txt
@@ -0,0 +1,1 @@
+aa
diff --git a/test/Golden/Parser/alt-right-try.dump b/test/Golden/Parser/alt-right-try.dump
new file mode 100644
--- /dev/null
+++ b/test/Golden/Parser/alt-right-try.dump
@@ -0,0 +1,1 @@
+"ab"
diff --git a/test/Golden/Parser/alt-right-try.txt b/test/Golden/Parser/alt-right-try.txt
new file mode 100644
--- /dev/null
+++ b/test/Golden/Parser/alt-right-try.txt
@@ -0,0 +1,1 @@
+ab
diff --git a/test/Golden/Parser/alt-right.dump b/test/Golden/Parser/alt-right.dump
new file mode 100644
--- /dev/null
+++ b/test/Golden/Parser/alt-right.dump
@@ -0,0 +1,1 @@
+ParsingErrorStandard {parsingErrorOffset = 1, parsingErrorUnexpected = Just 'b', parsingErrorExpecting = fromList [ErrorItemToken 'a']}
diff --git a/test/Golden/Parser/alt-right.txt b/test/Golden/Parser/alt-right.txt
new file mode 100644
--- /dev/null
+++ b/test/Golden/Parser/alt-right.txt
@@ -0,0 +1,1 @@
+ab
diff --git a/test/Golden/Parser/char.dump b/test/Golden/Parser/char.dump
new file mode 100644
--- /dev/null
+++ b/test/Golden/Parser/char.dump
@@ -0,0 +1,1 @@
+'a'
diff --git a/test/Golden/Parser/char.txt b/test/Golden/Parser/char.txt
new file mode 100644
--- /dev/null
+++ b/test/Golden/Parser/char.txt
@@ -0,0 +1,1 @@
+a
diff --git a/test/Golden/Parser/eof-fail.dump b/test/Golden/Parser/eof-fail.dump
new file mode 100644
--- /dev/null
+++ b/test/Golden/Parser/eof-fail.dump
@@ -0,0 +1,1 @@
+ParsingErrorStandard {parsingErrorOffset = 0, parsingErrorUnexpected = Just 'a', parsingErrorExpecting = fromList [ErrorItemEnd]}
diff --git a/test/Golden/Parser/eof-fail.txt b/test/Golden/Parser/eof-fail.txt
new file mode 100644
--- /dev/null
+++ b/test/Golden/Parser/eof-fail.txt
@@ -0,0 +1,1 @@
+a
diff --git a/test/Golden/Parser/eof.dump b/test/Golden/Parser/eof.dump
new file mode 100644
--- /dev/null
+++ b/test/Golden/Parser/eof.dump
@@ -0,0 +1,1 @@
+()
diff --git a/test/Golden/Parser/eof.txt b/test/Golden/Parser/eof.txt
new file mode 100644
--- /dev/null
+++ b/test/Golden/Parser/eof.txt
diff --git a/test/Golden/Parser/left-right.txt b/test/Golden/Parser/left-right.txt
new file mode 100644
--- /dev/null
+++ b/test/Golden/Parser/left-right.txt
@@ -0,0 +1,1 @@
+aa
diff --git a/test/Golden/Parser/many-char-eof.dump b/test/Golden/Parser/many-char-eof.dump
new file mode 100644
--- /dev/null
+++ b/test/Golden/Parser/many-char-eof.dump
@@ -0,0 +1,1 @@
+ParsingErrorStandard {parsingErrorOffset = 3, parsingErrorUnexpected = Just 'a', parsingErrorExpecting = fromList [ErrorItemToken 'r',ErrorItemEnd]}
diff --git a/test/Golden/Parser/many-char-eof.txt b/test/Golden/Parser/many-char-eof.txt
new file mode 100644
--- /dev/null
+++ b/test/Golden/Parser/many-char-eof.txt
@@ -0,0 +1,1 @@
+rrra
diff --git a/test/Golden/Parser/many-char-fail.dump b/test/Golden/Parser/many-char-fail.dump
new file mode 100644
--- /dev/null
+++ b/test/Golden/Parser/many-char-fail.dump
@@ -0,0 +1,1 @@
+ParsingErrorStandard {parsingErrorOffset = 4, parsingErrorUnexpected = Just 'c', parsingErrorExpecting = fromList [ErrorItemToken 'a',ErrorItemToken 'b']}
diff --git a/test/Golden/Parser/many-char-fail.txt b/test/Golden/Parser/many-char-fail.txt
new file mode 100644
--- /dev/null
+++ b/test/Golden/Parser/many-char-fail.txt
@@ -0,0 +1,1 @@
+aaaac
diff --git a/test/Golden/Parser/many-char.dump b/test/Golden/Parser/many-char.dump
new file mode 100644
--- /dev/null
+++ b/test/Golden/Parser/many-char.dump
@@ -0,0 +1,1 @@
+"aaaaa"
diff --git a/test/Golden/Parser/many-char.txt b/test/Golden/Parser/many-char.txt
new file mode 100644
--- /dev/null
+++ b/test/Golden/Parser/many-char.txt
@@ -0,0 +1,1 @@
+aaaaa
diff --git a/test/Golden/Parser/string.dump b/test/Golden/Parser/string.dump
new file mode 100644
--- /dev/null
+++ b/test/Golden/Parser/string.dump
@@ -0,0 +1,1 @@
+"ab"
diff --git a/test/Golden/Parser/string.txt b/test/Golden/Parser/string.txt
new file mode 100644
--- /dev/null
+++ b/test/Golden/Parser/string.txt
@@ -0,0 +1,1 @@
+ab
