diff --git a/default.nix b/default.nix
--- a/default.nix
+++ b/default.nix
@@ -5,7 +5,7 @@
 }:
 mkDerivation {
   pname = "madlang";
-  version = "2.3.0.4";
+  version = "2.3.0.5";
   src = ./.;
   isLibrary = true;
   isExecutable = true;
diff --git a/madlang.cabal b/madlang.cabal
--- a/madlang.cabal
+++ b/madlang.cabal
@@ -1,5 +1,5 @@
 name:                madlang
-version:             2.3.0.5
+version:             2.3.0.6
 synopsis:            Randomized templating language DSL
 description:         Please see README.md
 homepage:            https://github.com/vmchale/madlang#readme
@@ -22,10 +22,20 @@
 cabal-version:       >=1.10
 
 Flag llvm-fast {
-  Description: Enable build with llvm backend
+  Description: Enable build with llvm backend (produces a faster executable)
   Default: False
 }
 
+Flag library {
+  Description: Don't build an executable
+  Default:     False
+}
+
+Flag gold {
+  Description: Enable the gold linker for faster build times
+  Default:     True
+}
+
 library
   hs-source-dirs:      src
   exposed-modules:     Text.Madlibs
@@ -59,17 +69,24 @@
                      , DeriveGeneric
                      , DeriveFunctor
                      , DeriveAnyClass
-  ghc-options:      -fwarn-unused-imports
-  -- -fwarn-unused-binds 
+  if flag(gold)
+    ghc-options:       -optl-fuse-ld=gold
+    ld-options:        -fuse-ld=gold
+  ghc-options:         -fwarn-unused-imports
 
 executable madlang
+  if flag(library)
+    Buildable: False
+  else
+    Buildable: True
   hs-source-dirs:      app
   main-is:             Main.hs
   if flag(llvm-fast)
-    ghc-options:       -threaded -static -fllvm -optlo-O3 -O3
-    -- -optc-static -optl-static
-  else
-    ghc-options:       -threaded -rtsopts -with-rtsopts=-N 
+    ghc-options:       -fllvm -O3 -optlo-O3 
+  if flag(gold)
+    ghc-options:       -optl-fuse-ld=gold 
+    ld-options:        -fuse-ld=gold
+  ghc-options:         -threaded -rtsopts -with-rtsopts=-N 
   build-depends:       base
                      , madlang
   default-language:    Haskell2010
@@ -84,9 +101,11 @@
                   , megaparsec
                   , text
   if flag(llvm-fast)
-    ghc-options:       -threaded -fllvm -optlo-O3 -O3 -fwarn-unused-imports
-  else
-    ghc-options:       -threaded -rtsopts -with-rtsopts=-N -O3 -fwarn-unused-imports
+    ghc-options:    -fllvm -optlo-O3 -O3 -fwarn-unused-imports
+  if flag(gold)
+    ghc-options:       -optl-fuse-ld=gold
+    ld-options:        -fuse-ld=gold
+  ghc-options:      -threaded -rtsopts -with-rtsopts=-N -O3 -fwarn-unused-imports
   default-language: Haskell2010
 
 test-suite madlang-test
@@ -101,6 +120,9 @@
                      , text
                      , mtl
                      , hspec-megaparsec
+  if flag(gold)
+    ghc-options:       -optl-fuse-ld=gold
+    ld-options:        -fuse-ld=gold
   ghc-options:         -threaded -rtsopts -with-rtsopts=-N -fwarn-unused-imports
   default-language:    Haskell2010
 
diff --git a/test/Spec.hs b/test/Spec.hs
--- a/test/Spec.hs
+++ b/test/Spec.hs
@@ -4,14 +4,8 @@
 import Test.Hspec
 import Test.Hspec.Megaparsec
 import Text.Madlibs
-import Text.Megaparsec
-import Control.Monad.IO.Class
-import Control.Monad.State
 import Data.Function
-import Control.Exception
 import qualified Data.Text as T
-import qualified Data.Text.IO as TIO
-import System.IO.Unsafe
 
 main :: IO ()
 main = hspec $ do
