diff --git a/CHANGES.markdown b/CHANGES.markdown
--- a/CHANGES.markdown
+++ b/CHANGES.markdown
@@ -1,3 +1,10 @@
+## Changes in 0.10.4 [2018.07.03]
+ - Add a `SafeHaskellSpec` test which ensures that certain modules (such as
+   `Prelude.Compat`) can be imported in the presence of `Safe`.
+ - This coincides with the `base-compat-0.10.4` release. Refer to the
+   [`base-compat` changelog](https://github.com/haskell-compat/base-compat/blob/master/base-compat/CHANGES.markdown#changes-in-0104-20180703)
+   for more details.
+
 ## Changes in 0.10.3 [2018.07.02]
  - This coincides with the `base-compat-0.10.3` release. Refer to the
    [`base-compat` changelog](https://github.com/haskell-compat/base-compat/blob/master/base-compat/CHANGES.markdown#changes-in-0103-20180702)
diff --git a/base-compat-batteries.cabal b/base-compat-batteries.cabal
--- a/base-compat-batteries.cabal
+++ b/base-compat-batteries.cabal
@@ -1,5 +1,5 @@
 name:             base-compat-batteries
-version:          0.10.3
+version:          0.10.4
 license:          MIT
 license-file:     LICENSE
 copyright:        (c) 2012-2018 Simon Hengel,
@@ -56,7 +56,7 @@
       -Wall
   build-depends:
       base        >= 4.3 && < 5,
-      base-compat == 0.10.3
+      base-compat == 0.10.4
   if !impl(ghc >= 7.8)
     build-depends:
       tagged >= 0.8.5 && < 0.9
@@ -225,6 +225,10 @@
       Prelude.CompatSpec
       System.Environment.CompatSpec
       Text.Read.CompatSpec
+
+      -- Other tests
+      SafeHaskellSpec
+      TestHspecTrustworthy
   build-depends:
       base >= 4.3 && < 5
     , base-compat-batteries
diff --git a/src/Type/Reflection/Compat.hs b/src/Type/Reflection/Compat.hs
--- a/src/Type/Reflection/Compat.hs
+++ b/src/Type/Reflection/Compat.hs
@@ -1,34 +1,10 @@
-{-# LANGUAGE CPP, NoImplicitPrelude #-}
-#if MIN_VERSION_base(4,10,0) && !(MIN_VERSION_base(4,11,0))
-{-# LANGUAGE RankNTypes #-}
-{-# LANGUAGE ScopedTypeVariables #-}
-{-# LANGUAGE TypeInType #-}
-#endif
+{-# LANGUAGE CPP, NoImplicitPrelude, PackageImports #-}
 module Type.Reflection.Compat (
 #if MIN_VERSION_base(4,10,0)
   module Base
-, withTypeable
 #endif
 ) where
 
-#if MIN_VERSION_base(4,11,0)
-import Type.Reflection as Base
-#elif MIN_VERSION_base(4,10,0)
-import Type.Reflection as Base hiding (withTypeable)
-#endif
-
-#if MIN_VERSION_base(4,10,0) && !(MIN_VERSION_base(4,11,0))
-import GHC.Exts (TYPE)
-import Type.Reflection (Typeable, TypeRep)
-import Unsafe.Coerce (unsafeCoerce)
-
--- | Use a 'TypeRep' as 'Typeable' evidence.
-withTypeable :: forall (a :: k) (r :: TYPE rep). ()
-             => TypeRep a -> (Typeable a => r) -> r
-withTypeable rep k = unsafeCoerce k' rep
-  where k' :: Gift a r
-        k' = Gift k
-
--- | A helper to satisfy the type checker in 'withTypeable'.
-newtype Gift a (r :: TYPE rep) = Gift (Typeable a => r)
+#if MIN_VERSION_base(4,10,0)
+import "base-compat" Type.Reflection.Compat as Base
 #endif
diff --git a/test/SafeHaskellSpec.hs b/test/SafeHaskellSpec.hs
new file mode 100644
--- /dev/null
+++ b/test/SafeHaskellSpec.hs
@@ -0,0 +1,65 @@
+{-# LANGUAGE CPP, NoImplicitPrelude #-}
+#if __GLASGOW_HASKELL__ >= 704
+{-# LANGUAGE Safe #-}
+#endif
+module SafeHaskellSpec (main, spec) where
+
+import TestHspecTrustworthy
+
+-- The following modules should not be Unsafe (#56):
+import Control.Concurrent.Compat ()
+import Control.Concurrent.MVar.Compat ()
+import Control.Exception.Compat ()
+import Control.Monad.Compat ()
+import Control.Monad.Fail.Compat ()
+import Control.Monad.IO.Class.Compat ()
+import Data.Bifoldable.Compat ()
+import Data.Bifunctor.Compat ()
+import Data.Bitraversable.Compat ()
+import Data.Bits.Compat ()
+import Data.Bool.Compat ()
+import Data.Complex.Compat ()
+import Data.Either.Compat ()
+import Data.Foldable.Compat ()
+import Data.Function.Compat ()
+import Data.Functor.Compat ()
+import Data.Functor.Compose.Compat ()
+import Data.Functor.Const.Compat ()
+import Data.Functor.Contravariant.Compat ()
+import Data.Functor.Identity.Compat ()
+import Data.Functor.Product.Compat ()
+import Data.Functor.Sum.Compat ()
+import Data.IORef.Compat ()
+import Data.List.Compat ()
+import Data.List.NonEmpty.Compat ()
+import Data.Monoid.Compat ()
+import Data.Proxy.Compat ()
+import Data.Ratio.Compat ()
+import Data.Semigroup.Compat ()
+import Data.STRef.Compat ()
+import Data.String.Compat ()
+import Data.Type.Coercion.Compat ()
+import Data.Version.Compat ()
+import Data.Void.Compat ()
+import Data.Word.Compat ()
+import Foreign.Compat ()
+import Foreign.ForeignPtr.Compat ()
+import Foreign.ForeignPtr.Safe.Compat ()
+import Foreign.Marshal.Alloc.Compat ()
+import Foreign.Marshal.Array.Compat ()
+import Foreign.Marshal.Compat ()
+import Foreign.Marshal.Safe.Compat ()
+import Foreign.Marshal.Utils.Compat ()
+import Numeric.Compat ()
+import Numeric.Natural.Compat ()
+import Prelude.Compat
+import System.Environment.Compat ()
+import System.Exit.Compat ()
+import Text.Read.Compat ()
+import Type.Reflection.Compat ()
+
+main :: IO ()
+main = hspec spec
+
+spec :: Spec
+spec = pure ()
diff --git a/test/TestHspecTrustworthy.hs b/test/TestHspecTrustworthy.hs
new file mode 100644
--- /dev/null
+++ b/test/TestHspecTrustworthy.hs
@@ -0,0 +1,8 @@
+{-# LANGUAGE CPP #-}
+#if __GLASGOW_HASKELL__ >= 702
+{-# LANGUAGE Trustworthy #-}
+#endif
+-- | Reexports "Test.Hspec" from a @Trustworthy@ module.
+module TestHspecTrustworthy (module Test.Hspec) where
+
+import Test.Hspec
