diff --git a/Setup.hs b/Setup.hs
deleted file mode 100644
--- a/Setup.hs
+++ /dev/null
@@ -1,9 +0,0 @@
-import Distribution.PackageDescription
-import Distribution.Simple
-import Distribution.Simple.LocalBuildInfo
-import Distribution.Simple.Setup
-
-import System.Process
-
-main :: IO ()
-main = defaultMain
diff --git a/bizzlelude.cabal b/bizzlelude.cabal
--- a/bizzlelude.cabal
+++ b/bizzlelude.cabal
@@ -1,6 +1,6 @@
-Cabal-Version:       3.0
+Cabal-Version:       3.6
 Name:                bizzlelude
-Version:             1.7.0
+Version:             4.17.2.1
 License:             BSD-3-Clause
 License-File:        LICENSE.txt
 Author:              Jason Bertsche
@@ -8,8 +8,8 @@
 Homepage:            http://github.com/TheBizzle
 Category:            Prelude
 Synopsis:            A lousy Prelude replacement by a lousy dude
-Description:         A lousy Prelude replacement by a lousy dude.  Imports common things while trying to avoid importing things could cause naming conflicts.  Favors `Text` over `String`.  Wants using `IO` to be painful.
-Stability:           Experimental
+Description:         A lousy Prelude replacement by a lousy dude.  Imports common things while trying to avoid importing things that could cause naming conflicts.  Favors `Text` over `String`.  Wants using `IO` to be painful.
+Stability:           Stable
 Build-type:          Simple
 
 source-repository head
@@ -32,8 +32,246 @@
     -fno-warn-name-shadowing
     -funbox-strict-fields
   Build-depends:
-    base-noprelude >= 4.13   && < 5,
-    containers     >= 0.6.2  && < 0.7.0,
-    directory      >= 1.3.6  && < 1.4.0,
-    regexpr        >= 0.5.4  && < 0.6.0,
-    text           >= 1.2.4  && < 1.3.0
+    , base == 4.17.2.1
+    , containers     >= 0.6.7  && < 0.7.0
+    , directory      >= 1.3.7  && < 1.4.0
+    , regexpr        >= 0.5.4  && < 0.6.0
+    , text           >= 2.0.2  && < 2.1
+
+  -- The below is copied from the `exposed-modules` in 'base' (modulo `prelude`)
+  Reexported-Modules:
+    , Control.Applicative
+    , Control.Arrow
+    , Control.Category
+    , Control.Concurrent
+    , Control.Concurrent.Chan
+    , Control.Concurrent.MVar
+    , Control.Concurrent.QSem
+    , Control.Concurrent.QSemN
+    , Control.Exception
+    , Control.Exception.Base
+    , Control.Monad
+    , Control.Monad.Fail
+    , Control.Monad.Fix
+    , Control.Monad.Instances
+    , Control.Monad.IO.Class
+    , Control.Monad.ST
+    , Control.Monad.ST.Lazy
+    , Control.Monad.ST.Lazy.Safe
+    , Control.Monad.ST.Lazy.Unsafe
+    , Control.Monad.ST.Safe
+    , Control.Monad.ST.Strict
+    , Control.Monad.ST.Unsafe
+    , Control.Monad.Zip
+    , Data.Array.Byte
+    , Data.Bifoldable
+    , Data.Bifunctor
+    , Data.Bitraversable
+    , Data.Bits
+    , Data.Bool
+    , Data.Char
+    , Data.Coerce
+    , Data.Complex
+    , Data.Data
+    , Data.Dynamic
+    , Data.Either
+    , Data.Eq
+    , Data.Fixed
+    , Data.Foldable
+    , Data.Function
+    , Data.Functor
+    , Data.Functor.Classes
+    , Data.Functor.Contravariant
+    , Data.Functor.Compose
+    , Data.Functor.Const
+    , Data.Functor.Identity
+    , Data.Functor.Product
+    , Data.Functor.Sum
+    , Data.IORef
+    , Data.Int
+    , Data.Ix
+    , Data.Kind
+    , Data.List
+    , Data.List.NonEmpty
+    , Data.Maybe
+    , Data.Monoid
+    , Data.Ord
+    , Data.Proxy
+    , Data.Ratio
+    , Data.Semigroup
+    , Data.STRef
+    , Data.STRef.Lazy
+    , Data.STRef.Strict
+    , Data.String
+    , Data.Traversable
+    , Data.Tuple
+    , Data.Type.Bool
+    , Data.Type.Coercion
+    , Data.Type.Equality
+    , Data.Type.Ord
+    , Data.Typeable
+    , Data.Unique
+    , Data.Version
+    , Data.Void
+    , Data.Word
+    , Debug.Trace
+    , Foreign
+    , Foreign.C
+    , Foreign.C.Error
+    , Foreign.C.String
+    , Foreign.C.Types
+    , Foreign.Concurrent
+    , Foreign.ForeignPtr
+    , Foreign.ForeignPtr.Safe
+    , Foreign.ForeignPtr.Unsafe
+    , Foreign.Marshal
+    , Foreign.Marshal.Alloc
+    , Foreign.Marshal.Array
+    , Foreign.Marshal.Error
+    , Foreign.Marshal.Pool
+    , Foreign.Marshal.Safe
+    , Foreign.Marshal.Unsafe
+    , Foreign.Marshal.Utils
+    , Foreign.Ptr
+    , Foreign.Safe
+    , Foreign.StablePtr
+    , Foreign.Storable
+    , GHC.Arr
+    , GHC.ArrayArray
+    , GHC.Base
+    , GHC.Bits
+    , GHC.ByteOrder
+    , GHC.Char
+    , GHC.Clock
+    , GHC.Conc
+    , GHC.Conc.IO
+    , GHC.Conc.Signal
+    , GHC.Conc.Sync
+    , GHC.ConsoleHandler
+    , GHC.Constants
+    , GHC.Desugar
+    , GHC.Enum
+    , GHC.Environment
+    , GHC.Err
+    , GHC.Event.TimeOut
+    , GHC.Exception
+    , GHC.Exception.Type
+    , GHC.ExecutionStack
+    , GHC.ExecutionStack.Internal
+    , GHC.Exts
+    , GHC.Fingerprint
+    , GHC.Fingerprint.Type
+    , GHC.Float
+    , GHC.Float.ConversionUtils
+    , GHC.Float.RealFracMethods
+    , GHC.Foreign
+    , GHC.ForeignPtr
+    , GHC.GHCi
+    , GHC.GHCi.Helpers
+    , GHC.Generics
+    , GHC.IO
+    , GHC.IO.Buffer
+    , GHC.IO.BufferedIO
+    , GHC.IO.Device
+    , GHC.IO.Encoding
+    , GHC.IO.Encoding.CodePage
+    , GHC.IO.Encoding.Failure
+    , GHC.IO.Encoding.Iconv
+    , GHC.IO.Encoding.Latin1
+    , GHC.IO.Encoding.Types
+    , GHC.IO.Encoding.UTF16
+    , GHC.IO.Encoding.UTF32
+    , GHC.IO.Encoding.UTF8
+    , GHC.IO.Exception
+    , GHC.IO.FD
+    , GHC.IO.Handle
+    , GHC.IO.Handle.FD
+    , GHC.IO.Handle.Internals
+    , GHC.IO.Handle.Lock
+    , GHC.IO.Handle.Text
+    , GHC.IO.Handle.Types
+    , GHC.IO.IOMode
+    , GHC.IO.Unsafe
+    , GHC.IO.StdHandles
+    , GHC.IO.SubSystem
+    , GHC.IOArray
+    , GHC.IORef
+    , GHC.Int
+    , GHC.Integer
+    , GHC.Integer.Logarithms
+    , GHC.IsList
+    , GHC.Ix
+    , GHC.List
+    , GHC.Maybe
+    , GHC.MVar
+    , GHC.Natural
+    , GHC.Num
+    , GHC.OldList
+    , GHC.OverloadedLabels
+    , GHC.Pack
+    , GHC.Profiling
+    , GHC.Ptr
+    , GHC.Read
+    , GHC.Real
+    , GHC.Records
+    , GHC.ResponseFile
+    , GHC.RTS.Flags
+    , GHC.ST
+    , GHC.Stack.CloneStack
+    , GHC.StaticPtr
+    , GHC.STRef
+    , GHC.Show
+    , GHC.Stable
+    , GHC.StableName
+    , GHC.Stack
+    , GHC.Stack.CCS
+    , GHC.Stack.Types
+    , GHC.Stats
+    , GHC.Storable
+    , GHC.TopHandler
+    , GHC.TypeError
+    , GHC.TypeLits
+    , GHC.TypeLits.Internal
+    , GHC.TypeNats
+    , GHC.TypeNats.Internal
+    , GHC.Unicode
+    , GHC.Weak
+    , GHC.Word
+    , Numeric
+    , Numeric.Natural
+    , System.CPUTime
+    , System.Console.GetOpt
+    , System.Environment
+    , System.Environment.Blank
+    , System.Exit
+    , System.IO
+    , System.IO.Error
+    , System.IO.Unsafe
+    , System.Info
+    , System.Mem
+    , System.Mem.StableName
+    , System.Mem.Weak
+    , System.Posix.Internals
+    , System.Posix.Types
+    , System.Timeout
+    , Text.ParserCombinators.ReadP
+    , Text.ParserCombinators.ReadPrec
+    , Text.Printf
+    , Text.Read
+    , Text.Read.Lex
+    , Text.Show
+    , Text.Show.Functions
+    , Type.Reflection
+    , Type.Reflection.Unsafe
+    , Unsafe.Coerce
+    , GHC.IOPort
+
+  if os(windows)
+    Reexported-Modules:
+      , GHC.IO.Encoding.CodePage.API
+      , GHC.IO.Encoding.CodePage.Table
+      , GHC.Conc.Windows
+      , GHC.Windows
+  else
+    Reexported-Modules:
+      , GHC.Event
diff --git a/src/main/External.hs b/src/main/External.hs
--- a/src/main/External.hs
+++ b/src/main/External.hs
@@ -3,7 +3,7 @@
 
 import Control.Arrow((&&&), (***))
 import Control.Applicative(Alternative((<|>)), Applicative((<*>), (<*), (*>), pure))
-import Control.Monad(filterM, foldM, foldM_, forM, forM_, guard, join, mapM, mapM_, Monad((>>), (>>=), return), MonadPlus(), sequence, sequence_, unless, when)
+import Control.Monad((=<<), filterM, foldM, foldM_, forM, forM_, guard, join, mapM, mapM_, Monad((>>), (>>=), return), MonadPlus(), sequence, sequence_, unless, when)
 import Control.Monad.IO.Class(liftIO)
 
 import Data.Bifunctor(Bifunctor(bimap, first, second))
@@ -35,7 +35,7 @@
 import GHC.Float(Double, Float)
 import GHC.IO(FilePath, IO)
 import GHC.Num(Integer, Num((+), (-), (*), abs, signum, fromInteger, negate), subtract)
-import GHC.Real((^), (^^), Fractional((/), recip, fromRational), fromIntegral, Integral(quot, rem, div, mod, quotRem, divMod, toInteger), RealFrac(properFraction, truncate, round, ceiling, floor))
+import GHC.Real((^), (^^), Fractional((/), recip, fromRational), fromIntegral, Integral(quot, rem, div, mod, quotRem, divMod, toInteger), RealFrac(properFraction, truncate, round, ceiling, floor), Real(toRational))
 import GHC.Show(Show(show))
 
 import Numeric(Floating, pi, exp, log, sqrt, (**), logBase, sin, cos, tan, asin, acos, atan, sinh, cosh, tanh, asinh, acosh, atanh)
diff --git a/src/main/Misc.hs b/src/main/Misc.hs
--- a/src/main/Misc.hs
+++ b/src/main/Misc.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE NoImplicitPrelude #-}
 {-# OPTIONS_GHC -fno-warn-missing-import-lists #-}
-module Misc((|>), (&>), (&>=), (>>>), (>=>), asString, asPath, asText, showText, concat, error, fromEither, map, pam, (<&>), cartProduct, regexMatch, groupOn, return', scalaGroupBy, putStrFlush, unsafeRead, listDirsRecursively, uncurry5) where
+module Misc((|>), (&>), (&>=), (>>>), (>=>), asString, asPath, asText, showText, concat, error, fromEither, map, pam, (<&>), cartProduct, regexMatch, groupOn, return', scalaGroupBy, putStrFlush, traceLabel, unsafeRead, listDirsRecursively, uncurry5) where
 
 import External
 
@@ -84,6 +84,9 @@
 -- Hack to make GHCI print this before the prompt (JAB, 2/20/17)
 putStrFlush :: Text -> IO ()
 putStrFlush x = (TIO.putStr x) >>= (const $ SIO.hFlush SIO.stdout)
+
+traceLabel :: (Show a) => Text -> a -> a
+traceLabel label a = traceShow (label <> ": " <> (showText a)) a
 
 unsafeRead :: Integral a => Text -> a
 unsafeRead = DTR.decimal &> (Either.either (error "Well, that read *was* unsafe...") id) &> fst
