diff --git a/dependent-sum.cabal b/dependent-sum.cabal
--- a/dependent-sum.cabal
+++ b/dependent-sum.cabal
@@ -1,5 +1,5 @@
 name:                   dependent-sum
-version:                0.2
+version:                0.2.0.1
 stability:              provisional
 
 cabal-version:          >= 1.6
@@ -28,4 +28,7 @@
   exposed-modules:      Data.Dependent.Sum
                         Data.GADT.Compare
                         Data.GADT.Show
+  other-modules:        Data.Dependent.Sum.Typeable
   build-depends:        base >= 3 && <5
+  if impl(ghc >= 7.2)
+    ghc-options:        -trust base
diff --git a/src/Data/Dependent/Sum.hs b/src/Data/Dependent/Sum.hs
--- a/src/Data/Dependent/Sum.hs
+++ b/src/Data/Dependent/Sum.hs
@@ -1,9 +1,15 @@
 {-# LANGUAGE ExistentialQuantification, GADTs #-}
+{-# LANGUAGE TypeOperators #-}
+{-# LANGUAGE CPP #-}
+#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 702
+{-# LANGUAGE Safe #-}
+#endif
 module Data.Dependent.Sum where
 
+import Data.Dependent.Sum.Typeable ({- instance Typeable ... -})
+
 import Data.GADT.Show
 import Data.GADT.Compare
-import Data.Typeable
 
 import Data.Maybe (fromMaybe)
 
@@ -36,12 +42,6 @@
 -- is equivalent to @foo bar (AString :=> "eep")@.
 data DSum tag = forall a. !(tag a) :=> a
 infixr 1 :=>
-
-instance Typeable1 t => Typeable (DSum t) where
-    typeOf ds = mkTyConApp dSumCon [typeOfT]
-        where
-            dSumCon = mkTyCon "Data.Dependent.Sum.DSum"
-            typeOfT = typeOf1 $ (undefined :: DSum f -> f a) ds
 
 -- |In order to make a 'Show' instance for @DSum tag@, @tag@ must be able
 -- to show itself as well as any value of the tagged type.  'GShow' together
diff --git a/src/Data/Dependent/Sum.hs-boot b/src/Data/Dependent/Sum.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Data/Dependent/Sum.hs-boot
@@ -0,0 +1,5 @@
+{-# LANGUAGE ExistentialQuantification, TypeOperators #-}
+module Data.Dependent.Sum where
+
+data DSum tag = forall a. !(tag a) :=> a
+infixr 1 :=>
diff --git a/src/Data/Dependent/Sum/Typeable.hs b/src/Data/Dependent/Sum/Typeable.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/Dependent/Sum/Typeable.hs
@@ -0,0 +1,28 @@
+{-# LANGUAGE CPP #-}
+#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 702
+{-# LANGUAGE Trustworthy #-}
+#endif
+-- |Separate module for Typeable declaration, to minimize the amount of
+-- visual inspection required to determine that this package is "safe"
+module Data.Dependent.Sum.Typeable where
+
+import {-# SOURCE #-} Data.Dependent.Sum
+import Data.Typeable
+
+#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 702
+
+instance Typeable1 t => Typeable (DSum t) where
+    typeOf ds = mkTyConApp dSumCon [typeOfT]
+        where
+            dSumCon = mkTyCon3 "dependent-sum" "Data.Dependent.Sum" "DSum"
+            typeOfT = typeOf1 $ (undefined :: DSum f -> f a) ds
+
+#else 
+
+instance Typeable1 t => Typeable (DSum t) where
+    typeOf ds = mkTyConApp dSumCon [typeOfT]
+        where
+            dSumCon = mkTyCon "Data.Dependent.Sum.DSum"
+            typeOfT = typeOf1 $ (undefined :: DSum f -> f a) ds
+
+#endif
diff --git a/src/Data/GADT/Compare.hs b/src/Data/GADT/Compare.hs
--- a/src/Data/GADT/Compare.hs
+++ b/src/Data/GADT/Compare.hs
@@ -3,6 +3,10 @@
 {-# LANGUAGE DeriveDataTypeable #-}
 {-# OPTIONS_GHC -fno-warn-deprecated-flags #-}
 {-# LANGUAGE ImpredicativeTypes #-}
+{-# LANGUAGE CPP #-}
+#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 702
+{-# LANGUAGE Safe #-}
+#endif
 module Data.GADT.Compare where
 
 import Data.Maybe
diff --git a/src/Data/GADT/Show.hs b/src/Data/GADT/Show.hs
--- a/src/Data/GADT/Show.hs
+++ b/src/Data/GADT/Show.hs
@@ -1,4 +1,8 @@
 {-# LANGUAGE RankNTypes, ImpredicativeTypes #-}
+{-# LANGUAGE CPP #-}
+#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 702
+{-# LANGUAGE Safe #-}
+#endif
 module Data.GADT.Show where
 
 -- |'Show'-like class for 1-type-parameter GADTs
