diff --git a/core/HaskellWorks/Polysemy/Cabal.hs b/core/HaskellWorks/Polysemy/Cabal.hs
--- a/core/HaskellWorks/Polysemy/Cabal.hs
+++ b/core/HaskellWorks/Polysemy/Cabal.hs
@@ -78,7 +78,7 @@
         Just bin -> return $ addExeSuffix (T.unpack bin)
         Nothing  -> throw $ GenericError $ "Missing bin-file in " <> tshow component
       [] -> throw $ GenericError $ "Cannot find exe " <> tshow pkg <> " in plan"
-    Left message -> throw $ GenericError $ "Cannot decode plan: " <> T.pack message
+    Left msg -> throw $ GenericError $ "Cannot decode plan: " <> T.pack msg
   where matching :: Component -> Bool
         matching component = case componentName component of
           Just name -> name == "exe:" <> T.pack pkg
diff --git a/core/HaskellWorks/Prelude.hs b/core/HaskellWorks/Prelude.hs
--- a/core/HaskellWorks/Prelude.hs
+++ b/core/HaskellWorks/Prelude.hs
@@ -63,6 +63,8 @@
   , ($!)
   , ($)
   , (&)
+  , not
+  , otherwise
   , (&&)
   , (||)
   , (.)
diff --git a/hedgehog/HaskellWorks/Polysemy/Hedgehog/Jot.hs b/hedgehog/HaskellWorks/Polysemy/Hedgehog/Jot.hs
--- a/hedgehog/HaskellWorks/Polysemy/Hedgehog/Jot.hs
+++ b/hedgehog/HaskellWorks/Polysemy/Hedgehog/Jot.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE BangPatterns #-}
+
 module HaskellWorks.Polysemy.Hedgehog.Jot
   ( jotShow,
     jotShow_,
@@ -296,10 +298,10 @@
   => Member (Reader PackagePath) r
   => FilePath
   -> Sem r FilePath
-jotPkgInputFile filePath = withFrozenCallStack $ do
+jotPkgInputFile fp = withFrozenCallStack $ do
   PackagePath { filePath = pkgPath } <- ask
-  jot_ $ pkgPath <> "/" <> filePath
-  return filePath
+  jot_ $ pkgPath <> "/" <> fp
+  return fp
 
 -- | Return the golden file path after annotating it relative to the package directory
 jotPkgGoldenFile :: ()
@@ -308,10 +310,10 @@
   => Member (Reader PackagePath) r
   => FilePath
   -> Sem r FilePath
-jotPkgGoldenFile filePath = withFrozenCallStack $ do
+jotPkgGoldenFile fp = withFrozenCallStack $ do
   PackagePath { filePath = pkgPath } <- ask
-  jot_ $ pkgPath <> "/" <> filePath
-  return filePath
+  jot_ $ pkgPath <> "/" <> fp
+  return fp
 
 jotRootInputFile :: ()
   => HasCallStack
@@ -319,9 +321,9 @@
   => Member (Reader ProjectRoot) r
   => FilePath
   -> Sem r FilePath
-jotRootInputFile filePath = withFrozenCallStack $ do
+jotRootInputFile fp = withFrozenCallStack $ do
   ProjectRoot { filePath = pkgPath } <- ask
-  jot $ pkgPath <> "/" <> filePath
+  jot $ pkgPath <> "/" <> fp
 
 -- | Return the test file path after annotating it relative to the project root directory
 jotTempFile :: ()
@@ -330,8 +332,8 @@
   => Member (Reader Workspace) r
   => FilePath
   -> Sem r FilePath
-jotTempFile filePath = withFrozenCallStack $ do
+jotTempFile fp = withFrozenCallStack $ do
   Workspace { filePath = workspace } <- ask
-  let relPath = workspace <> "/" <> filePath
+  let relPath = workspace <> "/" <> fp
   jot_ $ workspace <> "/" <> relPath
   return relPath
diff --git a/hw-polysemy.cabal b/hw-polysemy.cabal
--- a/hw-polysemy.cabal
+++ b/hw-polysemy.cabal
@@ -1,6 +1,6 @@
 cabal-version:          3.4
 name:                   hw-polysemy
-version:                0.2.5.0
+version:                0.2.6.0
 synopsis:               Opinionated polysemy library
 description:            Opinionated polysemy library.
 license:                Apache-2.0
@@ -17,7 +17,7 @@
   type:                 git
   location:             https://github.com/haskell-works/hw-polysemy
 
-common base                       { build-depends: base                       >= 4.18       && < 5      }
+common base                       { build-depends: base                       >= 4.13       && < 5      }
 
 common aeson                      { build-depends: aeson                                       < 2.3    }
 common async                      { build-depends: async                                       < 2.3    }
@@ -65,13 +65,17 @@
                         polysemy-plugin,
   default-extensions:   BlockArguments
                         DataKinds
+                        DeriveGeneric
                         DuplicateRecordFields
                         FlexibleContexts
                         FlexibleInstances
                         LambdaCase
                         NoImplicitPrelude
                         OverloadedStrings
+                        RankNTypes
+                        ScopedTypeVariables
                         TypeApplications
+                        TypeOperators
   ghc-options:          -Wall
                         -fplugin=Polysemy.Plugin
   if flag(werror)
@@ -143,7 +147,7 @@
                         HaskellWorks.Polysemy.System.Process
                         HaskellWorks.Prelude
   hs-source-dirs:       core
-  default-language:     GHC2021
+  default-language:     Haskell2010
 
 library hedgehog
   import:               base, project-config,
@@ -180,7 +184,7 @@
                         HaskellWorks.Polysemy.Hedgehog.Workspace
                         HaskellWorks.Polysemy.Hedgehog.Workspace.Types
   hs-source-dirs:       hedgehog
-  default-language:     GHC2021
+  default-language:     Haskell2010
 
 library
   import:               base, project-config,
@@ -226,7 +230,7 @@
                         HaskellWorks.Polysemy.System.Environment,
                         HaskellWorks.Polysemy.System.IO,
                         HaskellWorks.Polysemy.System.Process,
-  default-language:     GHC2021
+  default-language:     Haskell2010
 
 test-suite hw-polysemy-test
   import:               base, project-config,
@@ -237,7 +241,7 @@
                         tasty-hedgehog,
                         tasty,
                         text,
-  default-language:     GHC2021
+  default-language:     Haskell2010
   type:                 exitcode-stdio-1.0
   build-tool-depends:   tasty-discover:tasty-discover
   hs-source-dirs:       test
