diff --git a/LICENSE b/LICENSE
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright Vanessa McHale (c) 2017
+Copyright Vanessa McHale (c) 2017-2019
 
 All rights reserved.
 
diff --git a/Setup.hs b/Setup.hs
--- a/Setup.hs
+++ b/Setup.hs
@@ -1,10 +1,14 @@
+{-# OPTIONS_GHC -Wall #-}
+
 import           Data.Foldable            (sequenceA_)
 import           Distribution.CommandLine
 import           Distribution.Simple
 
 main :: IO ()
 main = sequenceA_
-    [ setManpath
+    [ setManpathBash
+    , setManpathZsh
+    , setManpathFish
     , writeManpages "man/madlang.1" "madlang.1"
     , writeBashCompletions "madlang"
     , defaultMain
diff --git a/madlang.cabal b/madlang.cabal
--- a/madlang.cabal
+++ b/madlang.cabal
@@ -1,54 +1,55 @@
-cabal-version: 1.18
-name: madlang
-version: 4.0.2.15
-license: BSD3
-license-file: LICENSE
-copyright: Copyright: (c) 2016-2018 Vanessa McHale
-maintainer: vamchale@gmail.com
-author: Vanessa McHale
-stability: experimental
-tested-with: ghc ==8.2.2 ghc ==8.4.3 ghc ==8.0.2
-synopsis: Randomized templating language DSL
+cabal-version:      1.18
+name:               madlang
+version:            4.0.2.16
+license:            BSD3
+license-file:       LICENSE
+copyright:          Copyright: (c) 2016-2019 Vanessa McHale
+maintainer:         vamchale@gmail.com
+author:             Vanessa McHale
+stability:          experimental
+tested-with:        ghc ==8.6.5 ghc ==8.4.4
+synopsis:           Randomized templating language DSL
 description:
     Madlang is a text templating language written in Haskell,
     meant to explore computational creativity and generative
     literature.
-category: Text
-build-type: Custom
+
+category:           Text
+build-type:         Custom
 extra-source-files:
     test/templates/*.mad
     test/templates/err/*.mad
     demo/*.mad
     cabal.project
     man/madlang.1
-extra-doc-files: README.md
-                 CHANGELOG.md
 
+extra-doc-files:
+    README.md
+    CHANGELOG.md
+
 source-repository head
-    type: darcs
+    type:     darcs
     location: https://hub.darcs.net/vmchale/madlang
 
 custom-setup
-    setup-depends: base -any,
-                   Cabal -any,
-                   cli-setup >=0.1.0.2
+    setup-depends:
+        base -any,
+        Cabal -any,
+        cli-setup >=0.2.1.0
 
 flag development
-    description:
-        Turn on '-Werror'
-    default: False
-    manual: True
+    description: Turn on '-Werror'
+    default:     False
+    manual:      True
 
 flag library
-    description:
-        Don't build an executable
-    default: False
-    manual: True
+    description: Don't build an executable
+    default:     False
+    manual:      True
 
 library
-    exposed-modules:
-        Text.Madlibs
-    hs-source-dirs: src
+    exposed-modules:  Text.Madlibs
+    hs-source-dirs:   src
     other-modules:
         Text.Madlibs.Ana.ParseUtils
         Text.Madlibs.Cata.Run
@@ -59,11 +60,13 @@
         Text.Madlibs.Internal.Utils
         Text.Madlibs.Cata.SemErr
         Text.Madlibs.Cata.Display
+
     default-language: Haskell2010
-    other-extensions: DeriveAnyClass DeriveFunctor DeriveGeneric
-                      DeriveLift FlexibleInstances OverloadedStrings TypeFamilies
-                      TemplateHaskell
-    ghc-options: -Wall
+    other-extensions:
+        DeriveAnyClass DeriveFunctor DeriveGeneric DeriveLift
+        FlexibleInstances OverloadedStrings TypeFamilies TemplateHaskell
+
+    ghc-options:      -Wall
     build-depends:
         base >=4.11 && <5,
         megaparsec >=7.0,
@@ -80,24 +83,26 @@
         containers -any,
         titlecase >=1.0,
         th-lift-instances -any,
-        recursion >=1.0.0.0,
+        recursion >=2.2.3.0,
         binary -any
 
     if (flag(development) && impl(ghc <8.4))
         ghc-options: -Werror
 
     if impl(ghc >=8.0)
-        ghc-options: -Wincomplete-uni-patterns -Wincomplete-record-updates
-                     -Wredundant-constraints -Widentities
+        ghc-options:
+            -Wincomplete-uni-patterns -Wincomplete-record-updates
+            -Wredundant-constraints -Widentities
 
 executable madlang
-    main-is: Main.hs
-    hs-source-dirs: app
+    main-is:          Main.hs
+    hs-source-dirs:   app
     other-modules:
         Paths_madlang
         Text.Madlibs.Packaging.Fetch
+
     default-language: Haskell2010
-    ghc-options: -Wall
+    ghc-options:      -Wall
     build-depends:
         base >=4.11,
         madlang -any,
@@ -119,17 +124,17 @@
         ghc-options: -Werror
 
     if impl(ghc >=8.0)
-        ghc-options: -Wincomplete-uni-patterns -Wincomplete-record-updates
-                     -Wredundant-constraints -Widentities
+        ghc-options:
+            -Wincomplete-uni-patterns -Wincomplete-record-updates
+            -Wredundant-constraints -Widentities
 
 test-suite madlang-test
-    type: exitcode-stdio-1.0
-    main-is: Spec.hs
-    hs-source-dirs: test
-    other-modules:
-        Demo
+    type:             exitcode-stdio-1.0
+    main-is:          Spec.hs
+    hs-source-dirs:   test
+    other-modules:    Demo
     default-language: Haskell2010
-    ghc-options: -threaded -rtsopts -Wall -with-rtsopts=-N
+    ghc-options:      -threaded -rtsopts -Wall -with-rtsopts=-N
     build-depends:
         base -any,
         madlang -any,
@@ -141,13 +146,14 @@
         ghc-options: -Werror
 
     if impl(ghc >=8.0)
-        ghc-options: -Wincomplete-uni-patterns -Wincomplete-record-updates
-                     -Wredundant-constraints -Widentities
+        ghc-options:
+            -Wincomplete-uni-patterns -Wincomplete-record-updates
+            -Wredundant-constraints -Widentities
 
 benchmark madlang-bench
-    type: exitcode-stdio-1.0
-    main-is: Bench.hs
-    hs-source-dirs: bench
+    type:             exitcode-stdio-1.0
+    main-is:          Bench.hs
+    hs-source-dirs:   bench
     default-language: Haskell2010
     build-depends:
         base -any,
@@ -163,5 +169,6 @@
         ghc-options: -Werror
 
     if impl(ghc >=8.0)
-        ghc-options: -Wincomplete-uni-patterns -Wincomplete-record-updates
-                     -Wredundant-constraints -Widentities
+        ghc-options:
+            -Wincomplete-uni-patterns -Wincomplete-record-updates
+            -Wredundant-constraints -Widentities
diff --git a/man/madlang.1 b/man/madlang.1
--- a/man/madlang.1
+++ b/man/madlang.1
@@ -1,10 +1,10 @@
-.\" Automatically generated by Pandoc 2.2.3.2
+.\" Automatically generated by Pandoc 2.7.3
 .\"
 .TH "madlang (1)" "" "" "" ""
 .hy
 .SH NAME
 .PP
-madlang \- a text templating language for generative literature
+madlang - a text templating language for generative literature
 .SH SYNOPSIS
 .PP
 madlang run <file>
@@ -18,24 +18,18 @@
 madlang sample <repo>
 .SH DESCRIPTION
 .PP
-\f[B]madlang\f[] is an interpreted language for generative literature
+\f[B]madlang\f[R] is an interpreted language for generative literature
 and computational creativity.
 .SH OPTIONS
 .TP
-.B \f[B]\-h\f[] \f[B]\-\-help\f[]
+.B \f[B]-h\f[R] \f[B]--help\f[R]
 Display help
-.RS
-.RE
 .TP
-.B \f[B]\-r\f[] \f[B]\-\-rep\f[]
+.B \f[B]-r\f[R] \f[B]--rep\f[R]
 Generate output more than once
-.RS
-.RE
 .TP
-.B \f[B]\-i\f[]
+.B \f[B]-i\f[R]
 Set an input to the template
-.RS
-.RE
 .SH CONFIGURATION
 .PP
 Place files in $HOME/.madlang for them to be available globally as
@@ -44,8 +38,8 @@
 .IP
 .nf
 \f[C]
-madlang\ install
-\f[]
+madlang install
+\f[R]
 .fi
 .SH EDITOR INTEGRATION
 .PP
@@ -53,21 +47,21 @@
 .IP
 .nf
 \f[C]
-madlang\ vim
-\f[]
+madlang vim
+\f[R]
 .fi
 .PP
 Alternately, it is available from
 .PP
-https://github.com/vmchale/madlang\-vim
+https://github.com/vmchale/madlang-vim
 .SH LIBRARIES
 .PP
-You can install third\-party libraries with
+You can install third-party libraries with
 .IP
 .nf
 \f[C]
-madlang\ get\ user/repo
-\f[]
+madlang get user/repo
+\f[R]
 .fi
 .PP
 The library will then be installed to $HOME/.madlang/repo
@@ -77,8 +71,8 @@
 .IP
 .nf
 \f[C]
-1.0\ "evil".oulipo
-\f[]
+1.0 \[dq]evil\[dq].oulipo
+\f[R]
 .fi
 .PP
 Currently supported modifiers are:
@@ -95,10 +89,10 @@
 .SH EXAMPLES
 .PP
 You can examine an example using the bundled libraries at
-https://hub.darcs.net/vmchale/madlang\-insults.
+https://hub.darcs.net/vmchale/madlang-insults.
 .SH COPYRIGHT
 .PP
-Copyright 2017\-2018.
+Copyright 2017-2019.
 Vanessa McHale.
 All Rights Reserved.
 .SH AUTHORS
diff --git a/src/Text/Madlibs/Internal/Types.hs b/src/Text/Madlibs/Internal/Types.hs
--- a/src/Text/Madlibs/Internal/Types.hs
+++ b/src/Text/Madlibs/Internal/Types.hs
@@ -40,7 +40,7 @@
 -- | datatype for a token returning a random string
 data RandTok = List [(Prob, RandTok)]
              | Value T.Text
-             deriving (Show, Eq, Lift, Generic, Binary)
+             deriving (Show, Eq, Lift, Generic, Binary, Recursive)
 
 apply :: (T.Text -> T.Text) -> RandTok -> RandTok
 apply f (Value str) = Value (f str)
@@ -69,10 +69,6 @@
 
 data RandTokF a = ListF [(Prob, a)]
                 | ValueF T.Text
-    deriving (Functor)
+    deriving (Functor, Generic)
 
 type instance Base RandTok = RandTokF
-
-instance Recursive RandTok where
-    project (List psk) = ListF psk
-    project (Value t)  = ValueF t
