diff --git a/Type/Ord.hs b/Type/Ord.hs
--- a/Type/Ord.hs
+++ b/Type/Ord.hs
@@ -17,7 +17,8 @@
 -}
 module Type.Ord (module Type.Ord.Base) where
 
-import Type.Digits (digit, radix)
+import Type.Digits (digit, radix, digitTypes)
+import Type.Digits.Stage0 (Digit(DigitStop))
 
 import Type.Ord.Base
 
@@ -25,15 +26,15 @@
 
 
 
-type instance Compare () () = EQ
+type instance Compare 'DigitStop 'DigitStop = 'EQ
 fmap concat $ sequence [ do
-  let dL = conT $ digit n
+  let dL = return pureTy
       [l, r] = map (varT . mkName) ["l", "r"]
       f x y z = tySynInstD ''Compare [x, y] z
   d <- f [t| $dL $l |] [t| $dL $r |] [t| Compare $l $r |]
   ((d:) . concat) `fmap` sequence [
-    let dR = conT $ digit m in
-    sequence [f [t| $dL $l |] [t| $dR $r |] [t| LT |],
-              f [t| $dR $l |] [t| $dL $r |] [t| GT |]]
+    let dR = promotedT $ digit m in
+    sequence [f [t| $dL $l |] [t| $dR $r |] [t| 'LT |],
+              f [t| $dR $l |] [t| $dL $r |] [t| 'GT |]]
     | m <- [n + 1..radix - 1] ]
-  | n <- [0..radix - 1] ]
+  | (n, pureTy) <- zip [0..] digitTypes ]
diff --git a/Type/Ord/Base.hs b/Type/Ord/Base.hs
--- a/Type/Ord/Base.hs
+++ b/Type/Ord/Base.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE TypeFamilies, EmptyDataDecls #-}
+{-# LANGUAGE TypeFamilies, DataKinds, PolyKinds #-}
 
 {- |
 
@@ -15,21 +15,17 @@
 
 -}
 module Type.Ord.Base
-  (module Type.Booleans, Compare, LT, EQ, GT, OrdCase, IsEQ, IsLT, IsGT) where
-
-import Type.Booleans (True, False)
+  (Compare, OrdCase, IsEQ, IsLT, IsGT) where
 
 
 
 -- | Type-level comparison.
-type family Compare l r
-
-data LT; data EQ; data GT
+type family Compare (l :: k) (r :: k) :: Ordering
 
 -- | @OrdCase x a b c@ reduces to @a@, @b@, or @c@, if @x@ is @LT@, @EQ@, or
 -- @GT@, respectively.
 type OrdCase x a b c = OrdCase_ x a b c
-type family OrdCase_ x a b c
+type family OrdCase_ (x :: Ordering) (a :: k) (b :: k) (c :: k) :: k
 type instance OrdCase_ LT a b c = a
 type instance OrdCase_ EQ a b c = b
 type instance OrdCase_ GT a b c = c
diff --git a/type-ord.cabal b/type-ord.cabal
--- a/type-ord.cabal
+++ b/type-ord.cabal
@@ -1,5 +1,5 @@
 Name:           type-ord
-Version:        0.1
+Version:        0.2
 License:        BSD3
 License-File:   LICENSE
 Author:         Nicolas Frisby <nicolas.frisby@gmail.com>
@@ -9,9 +9,8 @@
 
 Synopsis:       Type-level comparison operator
 
-Description: Type-level comparison operator with instances for ()-terminated
-  @type-digit@ numerals until <http://hackage.haskell.org/trac/ghc/ticket/1894>
-  is resolved.
+Description: Type-level comparison operator with instances for @type-digit@
+  numerals until <http://hackage.haskell.org/trac/ghc/ticket/1894> is resolved.
 
 Cabal-Version: >= 1.6.0.1
 
@@ -20,6 +19,6 @@
 
 Library
   Build-Depends: base >= 4 && < 5, template-haskell
-  Build-Depends: type-booleans < 0.2, type-spine < 0.2, type-digits < 0.2
+  Build-Depends: type-spine >= 0.2, type-digits >= 0.2
 
   Exposed-Modules: Type.Ord, Type.Ord.Base
