diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,3 +1,7 @@
+## 1.2.0.1
+
+* Use `HasCallStack` in `undefined`
+
 ## 1.2.0
 
 * Don't generalize I/O functions to `IOData`, instead specialize to
diff --git a/ClassyPrelude.hs b/ClassyPrelude.hs
--- a/ClassyPrelude.hs
+++ b/ClassyPrelude.hs
@@ -258,6 +258,10 @@
 import Control.Concurrent.STM.TMChan
 import Control.Concurrent.STM.TMQueue
 
+#if MIN_VERSION_base(4,9,0)
+import GHC.Stack (HasCallStack)
+#endif
+
 tshow :: Show a => a -> Text
 tshow = fromList . Prelude.show
 
@@ -370,7 +374,11 @@
 -- @"Prelude".'Prelude.undefined'@.
 --
 -- Since 0.5.5
+#if MIN_VERSION_base(4,9,0)
+undefined :: HasCallStack => a
+#else
 undefined :: a
+#endif
 undefined = error "ClassyPrelude.undefined"
 {-# DEPRECATED undefined "It is highly recommended that you either avoid partial functions or provide meaningful error messages" #-}
 
diff --git a/classy-prelude.cabal b/classy-prelude.cabal
--- a/classy-prelude.cabal
+++ b/classy-prelude.cabal
@@ -1,5 +1,5 @@
 name:                classy-prelude
-version:             1.2.0
+version:             1.2.0.1
 synopsis:            A typeclass-based Prelude.
 description:         Modern best practices without name collisions. No partial functions are exposed, but modern data structures are, without requiring import lists. Qualified modules also are not needed: instead operations are based on type-classes from the mono-traversable package.
 
