diff --git a/indexed-traversable-instances.cabal b/indexed-traversable-instances.cabal
--- a/indexed-traversable-instances.cabal
+++ b/indexed-traversable-instances.cabal
@@ -1,6 +1,6 @@
 cabal-version:      1.12
 name:               indexed-traversable-instances
-version:            0.1
+version:            0.1.1
 build-type:         Simple
 license:            BSD2
 license-file:       LICENSE
@@ -30,7 +30,9 @@
    || ==8.4.4
    || ==8.6.5
    || ==8.8.4
-   || ==8.10.2
+   || ==8.10.7
+   || ==9.0.1
+   || ==9.2.1
 
 source-repository head
   type:     git
@@ -42,14 +44,26 @@
   ghc-options:      -Wall
   hs-source-dirs:   src
   build-depends:
-      base                  >=4.5      && <4.16
+      base                  >=4.5      && <4.17
     , indexed-traversable   >=0.1      && <0.2
+    , OneTuple              >=0.3      && <0.4
     , tagged                >=0.8.6    && <0.9
     , unordered-containers  >=0.2.8.0  && <0.3
     , vector                >=0.12.1.2 && <0.13
 
   exposed-modules:  Data.Functor.WithIndex.Instances
 
+test-suite safe
+  type:             exitcode-stdio-1.0
+  default-language: Haskell2010
+  ghc-options:      -Wall
+  hs-source-dirs:   tests
+  main-is:          safe.hs
+  build-depends:
+      base
+    , indexed-traversable
+    , indexed-traversable-instances
+
 test-suite indexed-tests
   type:             exitcode-stdio-1.0
   default-language: Haskell2010
@@ -61,13 +75,14 @@
     , containers
     , indexed-traversable
     , indexed-traversable-instances
+    , OneTuple
     , transformers
     , unordered-containers
     , vector
 
   build-depends:
       QuickCheck            >=2.14.2   && <2.15
-    , quickcheck-instances  >=0.3.25.1 && <0.4
+    , quickcheck-instances  >=0.3.26   && <0.4
     , tasty                 >=1.2.3    && <1.5
     , tasty-quickcheck      >=0.10.1.1 && <0.11
 
diff --git a/src/Data/Functor/WithIndex/Instances.hs b/src/Data/Functor/WithIndex/Instances.hs
--- a/src/Data/Functor/WithIndex/Instances.hs
+++ b/src/Data/Functor/WithIndex/Instances.hs
@@ -21,6 +21,7 @@
 import Control.Applicative ((<$>))
 import Data.HashMap.Lazy   (HashMap)
 import Data.Tagged         (Tagged (..))
+import Data.Tuple.Solo     (Solo (Solo))
 import Data.Vector         (Vector)
 
 import qualified Data.HashMap.Lazy as HM
@@ -81,4 +82,20 @@
   {-# INLINE ifoldl' #-}
 instance TraversableWithIndex k (HashMap k) where
   itraverse = HM.traverseWithKey
+  {-# INLINE itraverse #-}
+
+-------------------------------------------------------------------------------
+-- OneTuple
+-------------------------------------------------------------------------------
+
+instance FunctorWithIndex () Solo where
+  imap f (Solo a) = Solo (f () a)
+  {-# INLINE imap #-}
+
+instance FoldableWithIndex () Solo where
+  ifoldMap f (Solo a) = f () a
+  {-# INLINE ifoldMap #-}
+
+instance TraversableWithIndex () Solo where
+  itraverse f (Solo a) = Solo <$> f () a
   {-# INLINE itraverse #-}
diff --git a/tests/main.hs b/tests/main.hs
--- a/tests/main.hs
+++ b/tests/main.hs
@@ -7,6 +7,7 @@
 import Data.Foldable         (toList)
 import Data.Functor.Identity (Identity (..))
 import Data.Monoid           (Endo (..), Monoid (..))
+import Data.Tuple.Solo       (Solo (Solo))
 import Test.QuickCheck
        (Arbitrary, CoArbitrary, Fun, Function, Property, applyFun, (===))
 import Test.QuickCheck.Poly  (A, B)
@@ -52,6 +53,7 @@
     , battery $ mkT (HM.keys :: forall a. HM.HashMap I a -> [I])
     , battery $ mkT (zipWith const [0 ..] . toList :: forall a. Seq.Seq a -> [Int])
     , battery $ mkT $ zipWith const [0 ..] . V.toList
+    , battery $ mkT $ \(Solo _) -> [()]
 #if MIN_VERSION_containers(0,6,3)
     , battery $ mkT IntMap.keys
 #endif
diff --git a/tests/safe.hs b/tests/safe.hs
new file mode 100644
--- /dev/null
+++ b/tests/safe.hs
@@ -0,0 +1,10 @@
+{-# LANGUAGE Safe #-}
+module Main (main) where
+
+import Data.Functor.WithIndex ()
+import Data.Functor.WithIndex.Instances ()
+import Data.Foldable.WithIndex ()
+import Data.Traversable.WithIndex ()
+
+main :: IO ()
+main = return ()
