diff --git a/core/HaskellWorks/Polysemy/Error.hs b/core/HaskellWorks/Polysemy/Error.hs
--- a/core/HaskellWorks/Polysemy/Error.hs
+++ b/core/HaskellWorks/Polysemy/Error.hs
@@ -3,9 +3,12 @@
   , onNothing
   , onLeftM
   , onNothingM
+  , trap
   ) where
 
 import           HaskellWorks.Polysemy.Prelude
+import           Polysemy
+import           Polysemy.Error
 
 onLeft :: Monad m => (e -> m a) -> Either e a -> m a
 onLeft f = either f pure
@@ -18,3 +21,10 @@
 
 onNothingM :: Monad m => m b -> m (Maybe b) -> m b
 onNothingM h f = onNothing h =<< f
+
+trap :: forall e r a. ()
+  => (e -> Sem r a)
+  -> Sem (Error e ': r) a
+  -> Sem r a
+trap h f =
+  runError f >>= either h pure
diff --git a/hedgehog/HaskellWorks/Polysemy/Hedgehog/Assert.hs b/hedgehog/HaskellWorks/Polysemy/Hedgehog/Assert.hs
--- a/hedgehog/HaskellWorks/Polysemy/Hedgehog/Assert.hs
+++ b/hedgehog/HaskellWorks/Polysemy/Hedgehog/Assert.hs
@@ -33,6 +33,7 @@
 import           Data.Generics.Product.Any
 import qualified Data.List                                      as L
 import qualified GHC.Stack                                      as GHC
+import           HaskellWorks.Polysemy.Error
 import           HaskellWorks.Polysemy.File
 import           HaskellWorks.Polysemy.Hedgehog.Effect.Hedgehog
 import           HaskellWorks.Polysemy.Prelude
@@ -144,15 +145,6 @@
   -> Sem r Pid
 assertPidOk hProcess = withFrozenCallStack $
   nothingFailM $ getPid hProcess
-
-trap :: forall e r a. ()
-  => (e -> Sem r a)
-  -> Sem (Error e ': r) a
-  -> Sem r a
-trap h f =
-  runError f >>= \case
-    Left e  -> h e
-    Right a -> pure a
 
 -- | Assert the 'filePath' can be parsed as JSON.
 assertIsJsonFile_ :: ()
diff --git a/hedgehog/HaskellWorks/Polysemy/Hedgehog/Golden.hs b/hedgehog/HaskellWorks/Polysemy/Hedgehog/Golden.hs
--- a/hedgehog/HaskellWorks/Polysemy/Hedgehog/Golden.hs
+++ b/hedgehog/HaskellWorks/Polysemy/Hedgehog/Golden.hs
@@ -23,7 +23,6 @@
 
 import qualified Control.Concurrent.QSem                       as IO
 import qualified Data.List                                     as List
-import qualified GHC.Stack                                     as GHC
 import qualified HaskellWorks.Polysemy.Control.Concurrent.QSem as PIO
 import           HaskellWorks.Polysemy.Prelude
 import           HaskellWorks.Polysemy.System.Directory        as PIO
@@ -57,6 +56,7 @@
   return $ value == Just "1"
 
 writeGoldenFile :: ()
+  => HasCallStack
   => Member Hedgehog r
   => Member (Embed IO) r
   => Member (Error IOException) r
@@ -64,19 +64,20 @@
   => FilePath
   -> String
   -> Sem r ()
-writeGoldenFile goldenFile actualContent = do
+writeGoldenFile goldenFile actualContent = withFrozenCallStack $ do
   jot_ $ "Creating golden file " <> goldenFile
   PIO.createDirectoryIfMissing True (takeDirectory goldenFile)
   PIO.writeFile goldenFile actualContent
 
 reportGoldenFileMissing :: ()
+  => HasCallStack
   => Member Hedgehog r
   => Member (Embed IO) r
   => Member (Error IOException) r
   => Member Log r
   => FilePath
   -> Sem r ()
-reportGoldenFileMissing goldenFile = do
+reportGoldenFileMissing goldenFile = withFrozenCallStack $ do
   jot_ $ unlines
     [ "Golden file " <> goldenFile <> " does not exist."
     , "To create it, run with CREATE_GOLDEN_FILES=1."
@@ -85,6 +86,7 @@
   failure
 
 checkAgainstGoldenFile :: ()
+  => HasCallStack
   => Member Hedgehog r
   => Member (Embed IO) r
   => Member (Error IOException) r
@@ -92,7 +94,7 @@
   => FilePath
   -> [String]
   -> Sem r ()
-checkAgainstGoldenFile goldenFile actualLines = do
+checkAgainstGoldenFile goldenFile actualLines = withFrozenCallStack $ do
   referenceLines <- List.lines <$> PIO.readFile goldenFile
   let difference = getGroupedDiff actualLines referenceLines
   case difference of
@@ -130,7 +132,7 @@
   => String   -- ^ Actual content
   -> FilePath -- ^ Reference file
   -> Sem r ()
-diffVsGoldenFile actualContent goldenFile = GHC.withFrozenCallStack $ do
+diffVsGoldenFile actualContent goldenFile = withFrozenCallStack $ do
   forM_ mGoldenFileLogFile $ \logFile ->
     PIO.bracketQSem sem $ PIO.appendFile logFile $ goldenFile <> "\n"
 
@@ -166,6 +168,6 @@
   => FilePath -- ^ Actual file
   -> FilePath -- ^ Reference file
   -> Sem r ()
-diffFileVsGoldenFile actualFile referenceFile = GHC.withFrozenCallStack $ do
+diffFileVsGoldenFile actualFile referenceFile = withFrozenCallStack $ do
   contents <- PIO.readFile actualFile
   diffVsGoldenFile contents referenceFile
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.1.0
+version:                0.2.2.0
 synopsis:               Opinionated polysemy library
 description:            Opinionated polysemy library.
 license:                Apache-2.0
