diff --git a/intro.cabal b/intro.cabal
--- a/intro.cabal
+++ b/intro.cabal
@@ -1,9 +1,11 @@
--- This file has been generated from package.yaml by hpack version 0.17.0.
+-- This file has been generated from package.yaml by hpack version 0.20.0.
 --
 -- see: https://github.com/sol/hpack
+--
+-- hash: 9fc8509089a8a65cf15057f855ce10d18a4da68eb2188fa16a129c05c22ee742
 
 name:           intro
-version:        0.3.0.1
+version:        0.3.1.0
 synopsis:       "Fixed Prelude" - Mostly total and safe, provides Text and Monad transformers
 description:    Intro is a modern Prelude which provides safe alternatives
                 for most of the partial functions and follows other
@@ -41,26 +43,26 @@
       src
   ghc-options: -Wall
   build-depends:
-      base                 >= 4.8     && < 5.0
-    , binary               >= 0.7     && < 0.9
-    , bytestring           >= 0.9     && < 0.11
-    , containers           >= 0.5     && < 0.6
-    , deepseq              >= 1.4     && < 1.5
-    , dlist                >= 0.7     && < 0.9
-    , extra                >= 1.5.1   && < 1.7
-    , hashable             >= 1.2.5   && < 1.3
-    , mtl                  >= 2.2     && < 2.3
-    , safe                 >= 0.3.11  && < 0.4
-    , text                 >= 0.7     && < 1.3
-    , transformers         >= 0.4     && < 0.6
-    , unordered-containers >= 0.2     && < 0.3
-    , writer-cps-mtl       >= 0.1.1.2 && < 0.2
+      base >=4.8 && <5.0
+    , binary >=0.7 && <0.9
+    , bytestring >=0.9 && <0.11
+    , containers >=0.5 && <0.6
+    , deepseq >=1.4 && <1.5
+    , dlist >=0.7 && <0.9
+    , extra >=1.5.1 && <1.7
+    , hashable >=1.2.5 && <1.3
+    , mtl >=2.2 && <2.3
+    , safe >=0.3.11 && <0.4
+    , text >=0.7 && <1.3
+    , transformers >=0.4 && <0.6
+    , unordered-containers >=0.2 && <0.3
+    , writer-cps-mtl >=0.1.1.2 && <0.2
   if impl(ghc < 8.0)
     build-depends:
-        semigroups >= 0.9 && < 1
+        semigroups >=0.9 && <1
   if impl(ghc < 8.1)
     build-depends:
-        bifunctors >= 5.2 && < 5.5
+        bifunctors >=5.2 && <5.5
   exposed-modules:
       Intro
   other-modules:
@@ -76,30 +78,31 @@
       test
   ghc-options: -Wall
   build-depends:
-      base                 >= 4.8     && < 5.0
-    , binary               >= 0.7     && < 0.9
-    , bytestring           >= 0.9     && < 0.11
-    , containers           >= 0.5     && < 0.6
-    , deepseq              >= 1.4     && < 1.5
-    , dlist                >= 0.7     && < 0.9
-    , extra                >= 1.5.1   && < 1.7
-    , hashable             >= 1.2.5   && < 1.3
-    , mtl                  >= 2.2     && < 2.3
-    , safe                 >= 0.3.11  && < 0.4
-    , text                 >= 0.7     && < 1.3
-    , transformers         >= 0.4     && < 0.6
-    , unordered-containers >= 0.2     && < 0.3
-    , writer-cps-mtl       >= 0.1.1.2 && < 0.2
+      QuickCheck
+    , base >=4.8 && <5.0
+    , binary >=0.7 && <0.9
+    , bytestring >=0.9 && <0.11
+    , containers >=0.5 && <0.6
+    , deepseq >=1.4 && <1.5
+    , dlist >=0.7 && <0.9
+    , extra >=1.5.1 && <1.7
+    , hashable >=1.2.5 && <1.3
     , intro
-    , QuickCheck
     , lens
+    , mtl >=2.2 && <2.3
+    , safe >=0.3.11 && <0.4
+    , text >=0.7 && <1.3
+    , transformers >=0.4 && <0.6
+    , unordered-containers >=0.2 && <0.3
+    , writer-cps-mtl >=0.1.1.2 && <0.2
   if impl(ghc < 8.0)
     build-depends:
-        semigroups >= 0.9 && < 1
+        semigroups >=0.9 && <1
   if impl(ghc < 8.1)
     build-depends:
-        bifunctors >= 5.2 && < 5.5
+        bifunctors >=5.2 && <5.5
   other-modules:
       BaseCompat
       LensCompat
+      Paths_intro
   default-language: Haskell2010
diff --git a/src/Intro.hs b/src/Intro.hs
--- a/src/Intro.hs
+++ b/src/Intro.hs
@@ -611,8 +611,12 @@
   , GHC.Generics.Generic
   , GHC.Generics.Generic1
   , Data.Typeable.Typeable
-  , Control.DeepSeq.NFData
   , Data.Binary.Binary
+  , Control.DeepSeq.NFData
+#if MIN_VERSION_base(4,10,0)
+  , Control.DeepSeq.NFData1
+  , Control.DeepSeq.NFData2
+#endif
 
   -- * Type level
 #if MIN_VERSION_base(4,9,0)
@@ -647,6 +651,7 @@
   , appendFileUtf8
 
   -- * Error handling and debugging
+  , HasCallStack
 #if MIN_VERSION_base(4,9,0)
   , Control.Monad.Fail.MonadFail
 #endif
@@ -895,7 +900,7 @@
 -- | Throw an undefined error. Use only for debugging.
 undefined :: HasCallStack => a
 undefined = Prelude.undefined
-{-# WARNING undefined "'undefined' remains in code" #-}
+{-# WARNING undefined "'undefined' should be used only for debugging" #-}
 
 -- | '<>' lifted to 'Control.Applicative.Applicative'
 (<>^) :: (Control.Applicative.Applicative f, Semigroup a) => f a -> f a -> f a
diff --git a/src/Intro/Trustworthy.hs b/src/Intro/Trustworthy.hs
--- a/src/Intro/Trustworthy.hs
+++ b/src/Intro/Trustworthy.hs
@@ -72,7 +72,7 @@
 -- trace message.
 trace :: Text -> a -> a
 trace = Debug.Trace.trace . unpack
-{-# WARNING trace "'trace' remains in code" #-}
+{-# WARNING trace "'trace' should be used only for debugging" #-}
 
 -- | Like 'trace' but returning unit in an arbitrary 'Applicative' context. Allows
 -- for convenient use in do-notation.
@@ -91,7 +91,7 @@
 -- >   traceM $ "y: " ++ show y
 traceM :: APPLICATIVE m => Text -> m ()
 traceM = Debug.Trace.traceM . unpack
-{-# WARNING traceM "'traceM' remains in code" #-}
+{-# WARNING traceM "'traceM' should be used only for debugging" #-}
 
 -- | Like 'trace', but uses 'show' on the argument to convert it to a 'String'.
 --
@@ -106,7 +106,7 @@
 -- >     ...
 traceShow :: Show a => a -> b -> b
 traceShow = Debug.Trace.traceShow
-{-# WARNING traceShow "'traceShow' remains in code" #-}
+{-# WARNING traceShow "'traceShow' should be used only for debugging" #-}
 
 -- | Like 'traceM', but uses 'show' on the argument to convert it to a 'String'.
 --
@@ -117,20 +117,20 @@
 -- >   traceShowM $ x + y
 traceShowM :: (Show a, APPLICATIVE m) => a -> m ()
 traceShowM = Debug.Trace.traceShowM
-{-# WARNING traceShowM "'traceShowM' remains in code" #-}
+{-# WARNING traceShowM "'traceShowM' should be used only for debugging" #-}
 
 -- | The 'traceIO' function outputs the trace message from the IO monad.
 -- This sequences the output with respect to other IO actions.
 traceIO :: MonadIO m => Text -> m ()
 traceIO = liftIO . Debug.Trace.traceIO . unpack
-{-# WARNING traceIO "'traceIO' remains in code" #-}
+{-# WARNING traceIO "'traceIO' should be used only for debugging" #-}
 
 -- | Like 'traceShow' but returns the shown value instead of a third value.
 traceShowId :: Show a => a -> a
 traceShowId = Debug.Trace.traceShowId
-{-# WARNING traceShowId "'traceShowId' remains in code" #-}
+{-# WARNING traceShowId "'traceShowId' should be used only for debugging" #-}
 
 -- | Like 'trace' but returns the message instead of a third value.
 traceId :: Text -> Text
 traceId a = Debug.Trace.trace (unpack a) a
-{-# WARNING traceId "'traceId' remains in code" #-}
+{-# WARNING traceId "'traceId' should be used only for debugging" #-}
