diff --git a/digit.cabal b/digit.cabal
--- a/digit.cabal
+++ b/digit.cabal
@@ -1,5 +1,5 @@
 name:               digit
-version:            0.1.1
+version:            0.1.2
 license:            BSD3
 license-File:       etc/LICENCE
 author:             Tony Morris <ʇǝu˙sıɹɹoɯʇ@ןןǝʞsɐɥ>
@@ -31,6 +31,7 @@
   build-depends:
                     base < 5 && >= 3
                     , lens >= 3.9.2
+                    , template-haskell
 
   ghc-options:
                     -Wall
diff --git a/src/Data/Digit/Digit.hs b/src/Data/Digit/Digit.hs
--- a/src/Data/Digit/Digit.hs
+++ b/src/Data/Digit/Digit.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE NoImplicitPrelude, DeriveDataTypeable, TemplateHaskell, QuasiQuotes #-}
 
 -- | A data type with ten nullary constructors [0-9] and combinators.
 module Data.Digit.Digit
@@ -10,9 +10,10 @@
 -- * Prisms
 , digit
 , digitC
+, digitQ
 ) where
 
-import Prelude(Show(..), Read(..), Eq, Enum(..), Maybe(..), Bounded, Ord, Int, Char, (.))
+import Prelude(Show(..), Read(..), Eq, Enum(..), Maybe(..), Bounded, Ord, Int, Char, (.), const, maybe, error)
 import Data.Digit.D0
 import Data.Digit.D1
 import Data.Digit.D2
@@ -24,6 +25,10 @@
 import Data.Digit.D8
 import Data.Digit.D9
 import Control.Lens
+import Data.Data (Data)
+import Data.Typeable (Typeable)
+import Language.Haskell.TH
+import Language.Haskell.TH.Quote
 
 -- $setup
 -- >>> import Prelude
@@ -40,7 +45,7 @@
   | D7
   | D8
   | D9
-  deriving (Eq, Ord, Enum, Bounded)
+  deriving (Eq, Ord, Enum, Bounded, Data, Typeable)
 
 -- | Catamorphism for @Digit@.
 --
@@ -190,7 +195,16 @@
   Prism' Char Digit
 digitC =
   prism'
-    (let f = f in f)
+    (\d -> case d of D0 -> '0'
+                     D1 -> '1'
+                     D2 -> '2'
+                     D3 -> '3'
+                     D4 -> '4'
+                     D5 -> '5'
+                     D6 -> '6'
+                     D7 -> '7'
+                     D8 -> '8'
+                     D9 -> '9')
     (\n -> case n of '0' -> Just D0
                      '1' -> Just D1
                      '2' -> Just D2
@@ -229,3 +243,30 @@
     [(D9, t)]
   readsPrec _ _       =
     []
+
+-- | A QuasiQuoter for any range of @Digit@.
+--
+-- [digitQ|4|] :: Digit
+-- 4
+--
+-- named [digitQ|4|]  = "four"
+-- named [digitQ|$x|] = "not four, " ++ show x ++ " instead"
+--
+-- mod10D x = let y = mod x 10 in [digitQ|$y|]
+digitQ :: QuasiQuoter
+digitQ = QuasiQuoter {
+    quoteExp = dexp
+  , quotePat = dpat
+  , quoteType = error "not quotable"
+  , quoteDec = error "not quotable"
+  }
+
+dexp :: [Char] -> ExpQ
+dexp ('$':vn) = varE (mkName vn)
+dexp (d:[])   = maybe (error "not a digit") (dataToExpQ (const Nothing)) (d ^? digitC)
+dexp _        = error "not a digit"
+
+dpat :: [Char] -> PatQ
+dpat ('$':vn) = varP (mkName vn)
+dpat (d:[])   = maybe (error "not a digit") (dataToPatQ (const Nothing)) (d ^? digitC)
+dpat _        = error "not a digit"
diff --git a/src/Data/Digit/Digit1_8.hs b/src/Data/Digit/Digit1_8.hs
--- a/src/Data/Digit/Digit1_8.hs
+++ b/src/Data/Digit/Digit1_8.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE NoImplicitPrelude, DeriveDataTypeable #-}
 
 -- | A data type with eight nullary constructors [1-8] and combinators.
 module Data.Digit.Digit1_8
@@ -26,6 +26,8 @@
 import Data.Digit.D7
 import Data.Digit.D8
 import Control.Lens
+import Data.Data (Data)
+import Data.Typeable (Typeable)
 
 -- $setup
 -- >>> import Prelude
@@ -42,7 +44,7 @@
   | D6
   | D7
   | D8
-  deriving (Eq, Ord, Bounded)
+  deriving (Eq, Ord, Enum, Bounded, Data, Typeable)
 
 -- | Catamorphism for @Digit1_8@.
 --
diff --git a/src/Data/Digit/Digit1_9.hs b/src/Data/Digit/Digit1_9.hs
--- a/src/Data/Digit/Digit1_9.hs
+++ b/src/Data/Digit/Digit1_9.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE NoImplicitPrelude, DeriveDataTypeable #-}
 
 -- | A data type with nine nullary constructors [1-9] and combinators.
 module Data.Digit.Digit1_9
@@ -25,6 +25,8 @@
 import Data.Digit.D8
 import Data.Digit.D9
 import Control.Lens
+import Data.Data (Data)
+import Data.Typeable (Typeable)
 
 -- $setup
 -- >>> import Prelude
@@ -41,7 +43,7 @@
   | D7
   | D8
   | D9
-  deriving (Eq, Ord, Bounded)
+  deriving (Eq, Ord, Enum, Bounded, Data, Typeable)
 
 -- | Catamorphism for @Digit1_9@.
 --
