diff --git a/language-bash.cabal b/language-bash.cabal
--- a/language-bash.cabal
+++ b/language-bash.cabal
@@ -1,16 +1,16 @@
 name:               language-bash
-version:            0.9.0
+version:            0.9.1
 category:           Language
 license:            BSD3
 license-file:       LICENSE
 author:             Kyle Raftogianis
 maintainer:         Kyle Raftogianis <knrafto@gmail.com>
-copyright:          Copyright (c) 2013-2018 Kyle Raftogianis
+copyright:          Copyright (c) 2013-2020 Kyle Raftogianis
 build-type:         Simple
 cabal-version:      >= 1.8
 homepage:           http://github.com/knrafto/language-bash/
 bug-reports:        http://github.com/knrafto/language-bash/issues
-tested-with:        GHC == 7.10.1, GHC == 7.10.2, GHC == 8.0.2, GHC == 8.4.3
+tested-with:        GHC == 7.10.1, GHC == 7.10.2, GHC == 8.0.2, GHC == 8.4.3, GHC == 8.8.3
 synopsis:           Parsing and pretty-printing Bash shell scripts
 description:
     A library for parsing, pretty-printing, and manipulating
@@ -19,6 +19,9 @@
 extra-source-files:
   .gitignore
   README.md
+  tests/pretty/*.golden
+  tests/pretty/*.out
+  tests/pretty/*.sh
 
 source-repository head
   type: git
diff --git a/tests/pretty/conditionals-simple.golden b/tests/pretty/conditionals-simple.golden
new file mode 100644
--- /dev/null
+++ b/tests/pretty/conditionals-simple.golden
@@ -0,0 +1,35 @@
+if true; then
+    true;
+fi;
+if true; then
+    true;
+else
+    if false; then
+        false;
+    fi;
+fi;
+if true; then
+    true;
+else
+    false;
+fi;
+if true; then
+    true;
+else
+    if false; then
+        false;
+    else
+        false;
+    fi;
+fi;
+case x in
+    x)
+        true;
+        ;;
+esac;
+select x; do
+    true;
+done;
+select x in y z; do
+    true;
+done;
diff --git a/tests/pretty/conditionals-simple.out b/tests/pretty/conditionals-simple.out
new file mode 100644
--- /dev/null
+++ b/tests/pretty/conditionals-simple.out
@@ -0,0 +1,35 @@
+if true; then
+    true;
+fi;
+if true; then
+    true;
+else
+    if false; then
+        false;
+    fi;
+fi;
+if true; then
+    true;
+else
+    false;
+fi;
+if true; then
+    true;
+else
+    if false; then
+        false;
+    else
+        false;
+    fi;
+fi;
+case x in
+    x)
+        true;
+        ;;
+esac;
+select x; do
+    true;
+done;
+select x in y z; do
+    true;
+done;
diff --git a/tests/pretty/conditionals-simple.sh b/tests/pretty/conditionals-simple.sh
new file mode 100644
--- /dev/null
+++ b/tests/pretty/conditionals-simple.sh
@@ -0,0 +1,7 @@
+if true; then true; fi
+if true; then true; elif false; then false; fi
+if true; then true; else false; fi
+if true; then true; elif false; then false; else false; fi
+case x in x) true;; esac
+select x; do true; done
+select x in y z; do true; done
diff --git a/tests/pretty/heredoc-composed.golden b/tests/pretty/heredoc-composed.golden
new file mode 100644
--- /dev/null
+++ b/tests/pretty/heredoc-composed.golden
@@ -0,0 +1,30 @@
+cat <<EOF1 |
+Here doc 1
+EOF1
+cat <<EOF2;
+Here doc 2
+EOF2
+cat <<EOF1 &&
+Here doc 1
+EOF1
+cat <<EOF2;
+Here doc 2
+EOF2
+cat <<EOF1 ||
+Here doc 1
+EOF1
+cat <<EOF2;
+Here doc 2
+EOF2
+cat <<EOF1 |
+Here doc 1
+EOF1
+for x in true; do
+    true;
+done;
+cat <<EOF1 |
+Here doc 1
+EOF1
+while true; do
+    true;
+done;
diff --git a/tests/pretty/heredoc-composed.out b/tests/pretty/heredoc-composed.out
new file mode 100644
--- /dev/null
+++ b/tests/pretty/heredoc-composed.out
@@ -0,0 +1,30 @@
+cat <<EOF1 |
+Here doc 1
+EOF1
+cat <<EOF2;
+Here doc 2
+EOF2
+cat <<EOF1 &&
+Here doc 1
+EOF1
+cat <<EOF2;
+Here doc 2
+EOF2
+cat <<EOF1 ||
+Here doc 1
+EOF1
+cat <<EOF2;
+Here doc 2
+EOF2
+cat <<EOF1 |
+Here doc 1
+EOF1
+for x in true; do
+    true;
+done;
+cat <<EOF1 |
+Here doc 1
+EOF1
+while true; do
+    true;
+done;
diff --git a/tests/pretty/heredoc-composed.sh b/tests/pretty/heredoc-composed.sh
new file mode 100644
--- /dev/null
+++ b/tests/pretty/heredoc-composed.sh
@@ -0,0 +1,25 @@
+cat <<EOF1 | cat <<EOF2
+Here doc 1
+EOF1
+Here doc 2
+EOF2
+
+cat <<EOF1 && cat <<EOF2
+Here doc 1
+EOF1
+Here doc 2
+EOF2
+
+cat <<EOF1 || cat <<EOF2
+Here doc 1
+EOF1
+Here doc 2
+EOF2
+
+cat <<EOF1 | for x in true; do true; done
+Here doc 1
+EOF1
+
+cat <<EOF1 | while true; do true; done
+Here doc 1
+EOF1
diff --git a/tests/pretty/heredoc-in-condition.golden b/tests/pretty/heredoc-in-condition.golden
new file mode 100644
--- /dev/null
+++ b/tests/pretty/heredoc-in-condition.golden
@@ -0,0 +1,18 @@
+if true <<EOF;
+here doc
+EOF
+then
+    true;
+fi;
+until true <<EOF;
+here doc
+EOF
+do
+    true;
+done;
+while true <<EOF;
+here doc
+EOF
+do
+    true;
+done;
diff --git a/tests/pretty/heredoc-in-condition.out b/tests/pretty/heredoc-in-condition.out
new file mode 100644
--- /dev/null
+++ b/tests/pretty/heredoc-in-condition.out
@@ -0,0 +1,18 @@
+if true <<EOF;
+here doc
+EOF
+then
+    true;
+fi;
+until true <<EOF;
+here doc
+EOF
+do
+    true;
+done;
+while true <<EOF;
+here doc
+EOF
+do
+    true;
+done;
diff --git a/tests/pretty/heredoc-in-condition.sh b/tests/pretty/heredoc-in-condition.sh
new file mode 100644
--- /dev/null
+++ b/tests/pretty/heredoc-in-condition.sh
@@ -0,0 +1,20 @@
+if true <<EOF
+here doc
+EOF
+then
+    true
+fi
+
+until true <<EOF
+here doc
+EOF
+do
+    true
+done
+
+while true <<EOF
+here doc
+EOF
+do
+    true
+done
diff --git a/tests/pretty/heredoc-nested.golden b/tests/pretty/heredoc-nested.golden
new file mode 100644
--- /dev/null
+++ b/tests/pretty/heredoc-nested.golden
@@ -0,0 +1,26 @@
+for x in true; do
+    cat <<EOF;
+here doc
+EOF
+done;
+for x in true; do
+    for y in true; do
+        cat <<EOF;
+here doc
+EOF
+        true;
+    done;
+done;
+while true; do
+    cat <<EOF;
+here doc
+EOF
+done;
+while true; do
+    while true; do
+        cat <<EOF;
+here doc
+EOF
+        true;
+    done;
+done;
diff --git a/tests/pretty/heredoc-nested.out b/tests/pretty/heredoc-nested.out
new file mode 100644
--- /dev/null
+++ b/tests/pretty/heredoc-nested.out
@@ -0,0 +1,26 @@
+for x in true; do
+    cat <<EOF;
+here doc
+EOF
+done;
+for x in true; do
+    for y in true; do
+        cat <<EOF;
+here doc
+EOF
+        true;
+    done;
+done;
+while true; do
+    cat <<EOF;
+here doc
+EOF
+done;
+while true; do
+    while true; do
+        cat <<EOF;
+here doc
+EOF
+        true;
+    done;
+done;
diff --git a/tests/pretty/heredoc-nested.sh b/tests/pretty/heredoc-nested.sh
new file mode 100644
--- /dev/null
+++ b/tests/pretty/heredoc-nested.sh
@@ -0,0 +1,25 @@
+for x in true; do cat <<EOF; done
+here doc
+EOF
+
+for x in true; do
+    for y in true; do
+        cat <<EOF
+here doc
+EOF
+        true
+    done
+done
+
+while true; do cat <<EOF; done
+here doc
+EOF
+
+while true; do
+    while true; do
+        cat <<EOF
+here doc
+EOF
+        true
+    done
+done
diff --git a/tests/pretty/heredoc.golden b/tests/pretty/heredoc.golden
new file mode 100644
--- /dev/null
+++ b/tests/pretty/heredoc.golden
@@ -0,0 +1,11 @@
+cat <<EOF;
+Hello world!
+EOF
+cat <<EOF1 <<EOF2;
+Here doc 1
+EOF1
+Here doc 2
+EOF2
+cat <<EOF >/dev/null;
+Hello world!
+EOF
diff --git a/tests/pretty/heredoc.out b/tests/pretty/heredoc.out
new file mode 100644
--- /dev/null
+++ b/tests/pretty/heredoc.out
@@ -0,0 +1,11 @@
+cat <<EOF;
+Hello world!
+EOF
+cat <<EOF1 <<EOF2;
+Here doc 1
+EOF1
+Here doc 2
+EOF2
+cat <<EOF >/dev/null;
+Hello world!
+EOF
diff --git a/tests/pretty/heredoc.sh b/tests/pretty/heredoc.sh
new file mode 100644
--- /dev/null
+++ b/tests/pretty/heredoc.sh
@@ -0,0 +1,13 @@
+cat <<EOF
+Hello world!
+EOF
+
+cat <<EOF1 <<EOF2
+Here doc 1
+EOF1
+Here doc 2
+EOF2
+
+cat <<EOF > /dev/null
+Hello world!
+EOF
diff --git a/tests/pretty/loops-nested.golden b/tests/pretty/loops-nested.golden
new file mode 100644
--- /dev/null
+++ b/tests/pretty/loops-nested.golden
@@ -0,0 +1,15 @@
+for x in true; do
+    for y in true; do
+        true;
+    done;
+done;
+until true; do
+    until true; do
+        true;
+    done;
+done;
+while true; do
+    while true; do
+        true;
+    done;
+done;
diff --git a/tests/pretty/loops-nested.out b/tests/pretty/loops-nested.out
new file mode 100644
--- /dev/null
+++ b/tests/pretty/loops-nested.out
@@ -0,0 +1,15 @@
+for x in true; do
+    for y in true; do
+        true;
+    done;
+done;
+until true; do
+    until true; do
+        true;
+    done;
+done;
+while true; do
+    while true; do
+        true;
+    done;
+done;
diff --git a/tests/pretty/loops-nested.sh b/tests/pretty/loops-nested.sh
new file mode 100644
--- /dev/null
+++ b/tests/pretty/loops-nested.sh
@@ -0,0 +1,17 @@
+for x in true; do
+    for y in true; do
+        true;
+    done
+done
+
+until true; do
+    until true; do
+        true;
+    done
+done
+
+while true; do
+    while true; do
+        true;
+    done
+done
diff --git a/tests/pretty/loops-simple.golden b/tests/pretty/loops-simple.golden
new file mode 100644
--- /dev/null
+++ b/tests/pretty/loops-simple.golden
@@ -0,0 +1,9 @@
+for x in true; do
+    true;
+done;
+until true; do
+    true;
+done;
+while true; do
+    true;
+done;
diff --git a/tests/pretty/loops-simple.out b/tests/pretty/loops-simple.out
new file mode 100644
--- /dev/null
+++ b/tests/pretty/loops-simple.out
@@ -0,0 +1,9 @@
+for x in true; do
+    true;
+done;
+until true; do
+    true;
+done;
+while true; do
+    true;
+done;
diff --git a/tests/pretty/loops-simple.sh b/tests/pretty/loops-simple.sh
new file mode 100644
--- /dev/null
+++ b/tests/pretty/loops-simple.sh
@@ -0,0 +1,3 @@
+for x in true; do true; done
+until true; do true; done
+while true; do true; done
diff --git a/tests/pretty/simple.golden b/tests/pretty/simple.golden
new file mode 100644
--- /dev/null
+++ b/tests/pretty/simple.golden
@@ -0,0 +1,14 @@
+declare foo;
+declare foo=bar;
+declare foo1=bar1 foo2=bar2;
+declare -i foo;
+declare -a foo;
+declare -r foo;
+cmd;
+cmd1 | cmd2;
+time cmd1 | cmd2;
+time -p cmd1 | cmd2;
+! cmd1 | cmd2;
+time -p ! cmd1 | cmd2;
+cmd1 && cmd2;
+cmd1 || cmd2;
diff --git a/tests/pretty/simple.out b/tests/pretty/simple.out
new file mode 100644
--- /dev/null
+++ b/tests/pretty/simple.out
@@ -0,0 +1,14 @@
+declare foo;
+declare foo=bar;
+declare foo1=bar1 foo2=bar2;
+declare -i foo;
+declare -a foo;
+declare -r foo;
+cmd;
+cmd1 | cmd2;
+time cmd1 | cmd2;
+time -p cmd1 | cmd2;
+! cmd1 | cmd2;
+time -p ! cmd1 | cmd2;
+cmd1 && cmd2;
+cmd1 || cmd2;
diff --git a/tests/pretty/simple.sh b/tests/pretty/simple.sh
new file mode 100644
--- /dev/null
+++ b/tests/pretty/simple.sh
@@ -0,0 +1,17 @@
+declare foo
+declare foo=bar
+declare foo1=bar1 foo2=bar2
+declare -i foo
+declare -a foo
+declare -r foo
+
+cmd;
+
+cmd1 | cmd2;
+time cmd1 | cmd2;
+time -p cmd1 | cmd2;
+! cmd1 | cmd2;
+time -p ! cmd1 | cmd2;
+
+cmd1 && cmd2
+cmd1 || cmd2
