diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,3 +1,8 @@
+# 0.2.2.2 (Sep. 14, 2015)
+
+* Use local `data Nat` for `Data.Open.Union`
+  * Using GHC.TypeLits lead to overlapping instances
+
 # 0.2.2.1 (Sep. 14, 2015)
 
 * Document ALL THE THINGS
diff --git a/freer.cabal b/freer.cabal
--- a/freer.cabal
+++ b/freer.cabal
@@ -1,5 +1,5 @@
 name:                freer
-version:             0.2.2.1
+version:             0.2.2.2
 synopsis:            Implementation of the Freer Monad
 license:             BSD3
 license-file:        LICENSE
diff --git a/src/Data/Open/Union.hs b/src/Data/Open/Union.hs
--- a/src/Data/Open/Union.hs
+++ b/src/Data/Open/Union.hs
@@ -37,8 +37,6 @@
   Member(..)
 ) where
 
-import GHC.TypeLits (Nat)
-
 --------------------------------------------------------------------------------
                            -- Interface --
 --------------------------------------------------------------------------------
@@ -66,6 +64,7 @@
 --------------------------------------------------------------------------------
                          -- Implementation --
 --------------------------------------------------------------------------------
+data Nat = S Nat | Z
 data P (n :: Nat) = P
 
 -- injecting/projecting at a specified position P n
@@ -73,12 +72,12 @@
   inj' :: P n -> t v -> Union r v
   prj' :: P n -> Union r v -> Maybe (t v)
 
-instance (r ~ (t ': r')) => Member' t r 0 where
+instance (r ~ (t ': r')) => Member' t r 'Z where
   inj' _ = UNow
   prj' _ (UNow x) = Just x
   prj' _ _        = Nothing
 
-instance (r ~ (t' ': r'), Member' t r' n) => Member' t r n where
+instance (r ~ (t' ': r'), Member' t r' n) => Member' t r ('S n) where
   inj' _ = UNext . inj' (P::P n)
   prj' _ (UNow _)  = Nothing
   prj' _ (UNext x) = prj' (P::P n) x
@@ -88,8 +87,8 @@
 -- This closed type family disambiguates otherwise overlapping
 -- instances
 type family FindElem (t :: * -> *) r :: Nat where
-  FindElem t (t ': r)    = 0
-  FindElem t (any ': r)  = FindElem t r
+  FindElem t (t ': r)    = 'Z
+  FindElem t (any ': r)  = 'S (FindElem t r)
 
 type family EQU (a :: k) (b :: k) :: Bool where
   EQU a a = 'True
