diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 # dickinson
 
+## 1.4.3.0
+
+  * REPL tab-completions no longer hang indefinitely
+
 ## 1.4.2.0
 
   * Export `pipelineBSLErr`
diff --git a/LICENSE b/LICENSE
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright Vanessa McHale (c) 2020
+Copyright Vanessa McHale (c) 2020, 2022
 
 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
 
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -4,6 +4,10 @@
 
 ## Installation
 
+### Web
+
+You can try out the language [on the web](http://vmchale.com/static/dickinson-web/) without installing anything.
+
 ### Binary Releases
 
 Binaries for some platforms are available on the [releases
diff --git a/doc/user-guide.pdf b/doc/user-guide.pdf
Binary files a/doc/user-guide.pdf and b/doc/user-guide.pdf differ
diff --git a/examples/ayeshaErotica.dck b/examples/ayeshaErotica.dck
new file mode 100644
--- /dev/null
+++ b/examples/ayeshaErotica.dck
@@ -0,0 +1,184 @@
+#!/usr/bin/env emd
+
+%-
+
+(:def slayyyter
+  (:oneof
+    (| "I'm blowing all my money right up my nose")
+    (| "I let him eat the fish like Nobu")
+    (|
+      '''
+      He's watching how far I can go
+      Erupts like a volcano
+      ''')
+    (| "Baby let me swallow them kids")
+    (| "my coat chinchilla")))
+
+(:def ayesha
+  (:oneof
+    (| "rhinoplasty forever")
+    (| "Razor blades and rubbers in my Yves St. Laurent")
+    (| "I want a hard facefucking in your '82 DeLorean")
+    (| "My tampon is small")
+    (| "I wanna look like the magazines")
+    (|
+      '''
+      I wanna let my hair down
+      ''')
+    (| "I got a thin waist, model legs, looking pussy in the face")
+    (| "If he's not a millionaire then I've gots to go")
+    (| "I'm 5'7\", he's alive")
+    (| "suicide on my wishlist")
+    (|
+      '''
+      I love robbery and fraud
+      I'm a shoplifting God
+      ''')
+    (| "I'm a self-made thousandaire")
+    (|
+      '''
+      Now, you don't have to hate me
+      I do that enough myself
+      ''')
+    (|
+      '''
+      Preventing teen pregnancy is easy as can be
+      Just put on your condom and follow me
+      ''')
+    (|
+      '''
+      Instead of liquor
+      I drink some cleaner
+      ''')
+    (| "Pound me til you're out of breath")
+    (|
+      '''
+      Since fourteen
+      I've been making football players cream
+      ''')
+    (| "Don't touch me I'm expensive")
+    (| "Grab these tits and pull that hair")
+    (|
+      '''
+      blunt on my lip
+      fanny pack on my hip
+      ''')
+    (| "I don't want Gucci I want trashy")
+    (| "I like hard dick and an even harder fist")
+    (|
+      '''
+      I can meet you after the show
+      In the parking lot next to the Super Eight Motel
+      ''')
+    (| "Long dreads, snapback")
+    (| "I hope I'm turning you on")
+    (| "Feel that estrogen")
+    (|
+      '''
+      I like it rough, yeah, put it in my butt
+      ''')
+    (| "I'll blow your dick while you drive to the beach.")
+    (| "Leave a cock blowing up like the world trade")
+    (| "I love doing crack")
+    (| "You can call me a slut bitch I get paid")
+    (| "Suck you dry like a fucking leech")
+    (| "If I want to fuck a teacher? I will.")
+    (| "When you talk business it makes me wet")
+    (| "Whose pussy smells like rosebush?")
+    (| "I need 15k for a pair of new tits")
+    (| "I chew more meat than Burger King")
+    (| "Flip me around and come get some")
+    (|
+      '''
+      Pills are so sweet
+      I love all the things that are sweet
+      How many pills shall I eat
+      ''')
+    (| "pulling on the nipples and he gets you real wet")
+    (| "Let your white studded belt hit the ground")
+    (| "I'm wearing fur to the pussy colored strawberry blonde")
+    (| "We're barely legal teen queens who love a mouth full of cock")
+    (| "if the hole’s empty then fill it")
+    (| "Put addys in my slurpee")
+    (| "I'm a valley girl fuckdoll living in the trash")
+    (| "I wanna be synthetic")
+    (|
+      '''
+      Then his tongue starts movin' down to somewhere new
+      He pulls his dick out and before you can ask
+      He slides ten inches in your pretty little ass
+      ''')
+    (|
+      '''
+      I wanna get fucked with a beer bottle
+      Break it, watch me bleed out
+      ''')
+    (| "bloody's how I like it, with an extra side of hate")
+    (| "Never drink anything under 10 grand")
+    (| "Don't tell anybody about your flaws")
+    (| "you gotta be ready for tons of oral")
+    (|
+      '''
+      I'm a young, rich, skinny bitch
+      And that's what fucking matters
+      ''')
+    (|
+      '''
+      Chopping up in the Mercedes
+      Snort it straight off of the dash
+      ''')
+    (| "You get ignored cause you're poor")
+    (|
+      '''
+      He's thin, tall, pale and frail
+      He's got no money, fresh out of jail
+      ''')
+    (| "My pussy tastes like Apple Jacks")
+    (| "I'm the First Lady of Juicy Couture")
+    (| "Sorry can't take your call cause I'm catching kids")
+    (|
+      '''
+      I sleep with guys
+      Just for fun and drugs
+      ''')
+    (|
+      '''
+      Breakfast at Tiffany's, lunch we're heading to Sak's
+      Dinner will be Balenciaga, Chanel will be a snack
+      ''')
+    (|
+      '''
+      All I want for Christmas is
+      An 8 ball of blow and a pair of new tits
+      ''')
+    (|
+      '''
+      One skin, two skin, three skin, four
+      ''')
+    (|
+      '''
+      Gag reflex? Bitch, think again
+      ''')
+    (|
+      '''
+      he loves me but he fucks me like he hates my guts
+      ''')
+    (|
+      '''
+      Honk the horn with ya big old breasts
+      ''')
+    (|
+      '''
+      Who put my baby in the oven?
+      ''')
+    (|
+      '''
+      Don't like relaxin' so I don't smoke pot
+      ''')
+    (|
+      '''
+      They say sex doesn’t sell anymore, but how come it's still selling in hotel rooms I go to?
+      ''')))
+
+(:def main
+  ayesha)
diff --git a/examples/starwars.dck b/examples/starwars.dck
new file mode 100644
--- /dev/null
+++ b/examples/starwars.dck
@@ -0,0 +1,93 @@
+#!/usr/bin/env emd
+
+%-
+
+(:def main
+  (:let
+    [either
+      (:oneof
+        (| "Quarrel")
+        (| "Vult")
+        (| "Dengar")
+        (| "Pike")
+        (| "Holo")
+        (| "Frik")
+        (| "Blot"))]
+    (:let
+      [firstname
+        (:oneof
+          (| "Yert")
+          (| "Wam")
+          (| "Pommet")
+          (| "Hodnar")
+          (| "Po")
+          (| "Jelk")
+          (| "Boba")
+          (| "Orchi")
+          (| "Zorn")
+          (| "Moth")
+          (| "Chert")
+          (| "Djam")
+          (| "Lozenge")
+          (| "Unkar")
+          (| "Karp")
+          (| "Jerek")
+          (| "Marasmus")
+          (| "Tote")
+          (| "Jegg")
+          (| "Bolt")
+          (| "Aura")
+          (| "Sonta")
+          (| "Trudkin")
+          (| "Slan")
+          (| "Gorp")
+          (| "Ferryk")
+          (| "Chilblain")
+          (| "Ren")
+          (| "Miles")
+          (| "Rolan")
+          (| "Mon")
+          (| "Ram")
+          (| "Hurx")
+          (| "Sheera")
+          (| "Jekku")
+          (| "Gorgle")
+          (| "Sorkin")
+          (| "Jenk")
+          (| "Ferrus")
+          (| "Tarp")
+          (| "Wate")
+          (| "Benzine")
+          (| "Slurp")
+          (| "Nuva")
+          (| "Corbin")
+          (| "Zara")
+          (| "Quort")
+          (| "Korra")
+          (| "Lud")
+          (| either))]
+      [lastname
+        (:oneof
+          (| "Grinell")
+          (| "Agate")
+          (| "Ackbar")
+          (| "Boll")
+          (| "Vos")
+          (| "Bon")
+          (| "Tink")
+          (| "Bum")
+          (| "Cathar")
+          (| "Barr")
+          (| "Brik")
+          (| "Gallus")
+          (| "Scarf")
+          (| "Pyce")
+          (| "Plutt")
+          (| "Blink")
+          (| "Phanto")
+          (| "Bliss")
+          (| "Festoon")
+          (| "Wet")
+          (| "Gorpax")
+          (| either))]
+      "${(:flatten firstname)} ${(:flatten lastname)}")))
diff --git a/language-dickinson.cabal b/language-dickinson.cabal
--- a/language-dickinson.cabal
+++ b/language-dickinson.cabal
@@ -1,9 +1,9 @@
 cabal-version:      2.0
 name:               language-dickinson
-version:            1.4.2.0
+version:            1.4.3.0
 license:            BSD3
 license-file:       LICENSE
-copyright:          Copyright: (c) 2020 Vanessa McHale
+copyright:          Copyright: (c) 2020, 2022 Vanessa McHale
 maintainer:         vamchale@gmail.com
 author:             Vanessa McHale
 tested-with:
@@ -188,14 +188,14 @@
     build-depends:
         base,
         dickinson,
-        optparse-applicative,
+        optparse-applicative >=0.14.1.0,
         bytestring,
         prettyprinter,
         text,
         haskeline >=0.8,
         mtl,
         random,
-        microlens-mtl,
+        microlens-mtl >=0.1.8.0,
         microlens,
         containers,
         filepath,
diff --git a/lib/adjectives.dck b/lib/adjectives.dck
--- a/lib/adjectives.dck
+++ b/lib/adjectives.dck
@@ -29,6 +29,7 @@
       (| "baneful")
       (| "auxetic")
       (| "bromide")
+      (| "bolshie")
       (| "murine")
       (| "banal")
       (| "redolent")
@@ -61,6 +62,7 @@
       (| "awesome")
       (| "apotropaic")
       (| "alluring")
+      (| "debile")
       (| "altricial")
       (| "amicular")
       (| "affable")
@@ -103,6 +105,7 @@
       (| "cosmopolitan")
       (| "cymotrichous")
       (| "chthonic")
+      (| "contumacious")
       (| "cherished")
       (| "chalybeate")
       (| "criminal")
@@ -179,6 +182,7 @@
       (| "fragrant")
       (| "funny")
       (| "flaccid")
+      (| "hebephrenic")
       (| "fastidious")
       (| "fulsome")
       (| "foundational")
@@ -294,6 +298,7 @@
       (| "skilled")
       (| "salacious")
       (| "sacerdotal")
+      (| "bleary")
       (| "narrow")
       (| "narcoleptic")
       (| "nude")
@@ -411,6 +416,7 @@
       (| "ruby")
       (| "ravenous")
       (| "retro")
+      (| "ineluctable")
       (| "radical")
       (| "rustic")
       (| "rational")
@@ -429,6 +435,7 @@
       (| "turbulent")
       (| "tawdry")
       (| "trite")
+      (| "callipygian")
       (| "tired")
       (| "tendentious")
       (| "titillating")
diff --git a/lib/brands.dck b/lib/brands.dck
new file mode 100644
--- /dev/null
+++ b/lib/brands.dck
@@ -0,0 +1,47 @@
+%-
+
+(:def car
+  (:oneof
+    (| "Mercedes")
+    (| "Hummer")
+    (| "Cadillac")
+    (| "Porsche")
+    (| "Ferrari")
+    (| "Bentley")
+    (| "BMW")))
+
+; chinchilla...
+(:def brand
+  (:oneof
+    (| "Sak's")
+    (| "Bloomingdale's")
+    (| "Birkin")
+    (| "McQueen")
+    (| "Fendi")
+    (| "Cartier")
+    (| "Ferragamo")
+    (| "J. Crew")
+    (| "Vineyard Vines")
+    (| "Moncler")
+    (| "Versace")
+    (| "Valentino")
+    (| "Moschino")
+    (| "Nike")
+    (| "Armani")
+    (| "Patagonia")
+    (| "Miu miu")
+    (| "Ralph Lauren")
+    (| "Calvin Klein")
+    (| "Prada")
+    ; blackglama
+    (| "Balmain")
+    (| "Balenciaga")
+    (| "Gucci")
+    (| "Comme des Garçons")
+    (| "Neiman Marcus")
+    (| "Chanel")
+    (| "Margiela")
+    (| "Louis Vuitton")
+    (| "Juicy Couture")
+    (| "Dior")
+    (| "Yves St. Laurent")))
diff --git a/lib/noun.dck b/lib/noun.dck
--- a/lib/noun.dck
+++ b/lib/noun.dck
@@ -26,7 +26,6 @@
     (| "sabbing")
     (| "adynaton")
     (| "aposiopesis")
-    (| "pilcrow")
     (| "asyndeton")
     (| "wean")
     (| "consilience")
@@ -47,13 +46,13 @@
     (| "paradox")
     (| "hyperbole")
     (| "epizeuxis")
+    (| "orbitoclast")
     (| "hypocatastasis")
     (| "mesozeugma")
     (| "simile")
     (| "alliteration")
     (| "synecdoche")
     (| "catachresis")
-    (| "guff")
     (| "anapodoton")
     (| "anacoluthon")
     (| "anadiplosis")
@@ -113,7 +112,10 @@
       (| "sitophobia")
       (| "acedia")
       (| "spandrel")
+      (| "breeks")
+      (| "exiguity")
       (| "tail")
+      (| "abdest")
       (| "bredrin")
       (| "apse")
       (| "joke")
@@ -121,6 +123,8 @@
       (| "caloyer")
       (| "foofaraw")
       (| "supererogation")
+      (| "steatopygia")
+      (| "pilcrow")
       (| "autonomous")
       (| "pseudonym")
       (| "exegete")
@@ -129,6 +133,7 @@
       (| "potboiler")
       (| "heliophagy")
       (| "alterity")
+      (| "diegesis")
       (| "poultice")
       (| "quiescence")
       (| "gemish")
@@ -139,13 +144,13 @@
       (| "seppo")
       (| "pyxis")
       (| "salp")
-      (| "kayfabe")
       (| "stope")
       (| "pablum")
       (| "pastille")
       (| "satori")
       (| "catechumen")
       (| "ardor")
+      (| "tellurian")
       (| "palaver")
       (| "theogeny")
       (| "curio")
@@ -171,6 +176,7 @@
       (| "sphygmomanometer")
       (| "colophon")
       (| "belvedere")
+      (| "guff")
       (| "dilatation")
       (| "blagging")
       (| "clyster")
@@ -178,6 +184,7 @@
       (| "kyphosis")
       (| "kyphoscoliosis")
       (| "ossicle")
+      (| "vaticination")
       (| "apocope")
       (| "aphaeresis")
       (| "cwm")
@@ -235,10 +242,12 @@
       (| "prig")
       (| "lavra")
       (| "epeolatry")
+      (| "whitlow")
       (| "nosogenesis")
       (| "onychophagy")
       (| "parsimony")
       (| "cenobite")
+      (| "aporia")
       (| "hermit")
       (| "anosognosia")
       (| "radula")
@@ -256,7 +265,6 @@
       (| "schorl")
       (| "velleity")
       (| "syncope")
-      (| "enuresis")
       (| "saccade")
       (| "yardstick")
       (| "epistates")
@@ -406,17 +414,22 @@
       (| "cock")
       (| "confluence")
       (| "bed")
+      (| "skerry")
       (| "leather")
       (| "vinyl")
       (| "latex")
       (| "jeremiad")
       (| "sitiogonic")
+      (| "isopsephy")
       (| "apotheosis")
       (| "aphelion")
       (| "bevel")
       (| "thurible")
       (| "perihelion")
+      (| "bleb")
       (| "cabochon")
       (| "sortition")
+      (| "stotting")
       (| "weft")
+      (| "tenesmus")
       (| "folderol"))))
diff --git a/lib/verb.dck b/lib/verb.dck
--- a/lib/verb.dck
+++ b/lib/verb.dck
@@ -8,6 +8,7 @@
     (| "loll")
     (| "avulse")
     (| "plotz")
+    (| "inure")
     (| "subluxate")
     (| "remonstrate")
     (| "boke")))
diff --git a/run/REPL/Completions.hs b/run/REPL/Completions.hs
--- a/run/REPL/Completions.hs
+++ b/run/REPL/Completions.hs
@@ -14,8 +14,7 @@
 namesStr = gets (fmap T.unpack . M.keys . topLevel)
 
 cyclicSimple :: [String] -> [Completion]
-cyclicSimple [] = []
-cyclicSimple xs = cycle $ fmap simpleCompletion xs
+cyclicSimple = fmap simpleCompletion
 
 emdCompletions :: CompletionFunc (StateT (EvalSt a) IO)
 emdCompletions (":","")       = pure (":", cyclicSimple [ "help", "h", "save", "load", "l", "r", "type", "t", "view", "quit", "q", "list" ])
diff --git a/src/Language/Dickinson/File.hs b/src/Language/Dickinson/File.hs
--- a/src/Language/Dickinson/File.hs
+++ b/src/Language/Dickinson/File.hs
@@ -45,7 +45,6 @@
 import           Language.Dickinson.Rename.Amalgamate
 import           Language.Dickinson.Type
 import           Language.Dickinson.TypeCheck
-import           Prettyprinter                        (pretty)
 import           System.Random                        (StdGen, newStdGen, randoms)
 
 data AmalgamateSt = AmalgamateSt { amalgamateRenames    :: Renames
