diff --git a/memoize.cabal b/memoize.cabal
--- a/memoize.cabal
+++ b/memoize.cabal
@@ -1,6 +1,6 @@
 cabal-version:  2.2
 name:           memoize
-version:        1.0.0
+version:        1.1.0
 license:        BSD-3-Clause
 license-file:   LICENSE
 stability:      experimental
diff --git a/src/Data/Function/Memoize.hs b/src/Data/Function/Memoize.hs
--- a/src/Data/Function/Memoize.hs
+++ b/src/Data/Function/Memoize.hs
@@ -33,6 +33,10 @@
   deriveMemoizable, deriveMemoizableParams, deriveMemoize,
 ) where
 
+#if MIN_VERSION_base(4,16,0)
+#  define COMPAT_HAS_SOLO
+#endif
+
 #if __GLASGOW_HASKELL__ < 710
 import Control.Applicative
 #endif
@@ -42,6 +46,15 @@
 import Data.Function.Memoize.Class
 import Data.Function.Memoize.TH
 
+import qualified Data.Complex   as Complex
+import qualified Data.Ratio     as Ratio
+#ifdef COMPAT_HAS_SOLO
+import qualified Data.Tuple     as Tuple
+#endif
+import qualified Data.Version   as Version
+import qualified Data.Void      as Void
+import qualified Data.Word      as Word
+
 -- | Memoize a two argument function
 memoize2 ∷ (Memoizable a, Memoizable b) ⇒
            (a → b → v) → a → b → v
@@ -130,29 +143,6 @@
 traceMemoize f = memoize (\a → traceShow a (f a))
 
 ---
---- Derived instances
----
-
-deriveMemoizable ''()
-deriveMemoizable ''Bool
-deriveMemoizable ''Ordering
-deriveMemoizable ''Maybe
-deriveMemoizable ''Either
-deriveMemoizable ''[]
-
-deriveMemoizable ''(,)
-deriveMemoizable ''(,,)
-deriveMemoizable ''(,,,)
-deriveMemoizable ''(,,,,)
-deriveMemoizable ''(,,,,,)
-deriveMemoizable ''(,,,,,,)
-deriveMemoizable ''(,,,,,,,)
-deriveMemoizable ''(,,,,,,,,)
-deriveMemoizable ''(,,,,,,,,,)
-deriveMemoizable ''(,,,,,,,,,,)
-deriveMemoizable ''(,,,,,,,,,,,)
-
----
 --- Binary-tree based memo caches
 ---
 
@@ -181,7 +171,7 @@
     }
   deriving Functor
 
--- | A positive integer cache is represented as a little-ending bitwise
+-- | A positive integer cache is represented as a little-endian bitwise
 --   trie
 type PosIntCache v = BinaryTreeCache v
 
@@ -274,8 +264,41 @@
 
 instance Memoizable Int where memoize = memoizeFinite
 instance Memoizable Char where memoize = memoizeFinite
+instance Memoizable Word.Word where memoize = memoizeFinite
+instance Memoizable Word.Word8 where memoize = memoizeFinite
+instance Memoizable Word.Word16 where memoize = memoizeFinite
+instance Memoizable Word.Word32 where memoize = memoizeFinite
+instance Memoizable Word.Word64 where memoize = memoizeFinite
 
 ---
+--- Derived instances
+---
+
+deriveMemoizable ''()
+deriveMemoizable ''Bool
+deriveMemoizable ''Ordering
+deriveMemoizable ''Maybe
+deriveMemoizable ''Either
+deriveMemoizable ''[]
+deriveMemoizable ''Complex.Complex
+deriveMemoizable ''Version.Version
+
+#ifdef COMPAT_HAS_SOLO
+deriveMemoizable ''Tuple.Solo
+#endif
+deriveMemoizable ''(,)
+deriveMemoizable ''(,,)
+deriveMemoizable ''(,,,)
+deriveMemoizable ''(,,,,)
+deriveMemoizable ''(,,,,,)
+deriveMemoizable ''(,,,,,,)
+deriveMemoizable ''(,,,,,,,)
+deriveMemoizable ''(,,,,,,,,)
+deriveMemoizable ''(,,,,,,,,,)
+deriveMemoizable ''(,,,,,,,,,,)
+deriveMemoizable ''(,,,,,,,,,,,)
+
+---
 --- Functions
 ---
 
@@ -304,6 +327,22 @@
       fcNil  ∷ v,
       fcCons ∷ b → FunctionCache b v
     }
+
+
+---
+--- Other instances
+---
+
+instance Memoizable Void.Void where
+  memoize f = f . Void.absurd
+
+-- Data.Ratio.Ratio isn't derivable because it's an abstract type.
+instance (Integral a, Memoizable a) => Memoizable (Ratio.Ratio a) where
+  memoize f = memoize (f . inj) . prj
+    where
+      prj r      = (Ratio.numerator r, Ratio.denominator r)
+      inj (n, d) = n Ratio.% d
+
 
 ---
 --- Example functions
