diff --git a/Data/Number/Natural.hs b/Data/Number/Natural.hs
--- a/Data/Number/Natural.hs
+++ b/Data/Number/Natural.hs
@@ -6,6 +6,8 @@
 -- when considering bottom.
 module Data.Number.Natural(Natural, infinity) where
 
+import Data.Maybe
+
 data Natural = Z | S Natural
 
 instance Show Natural where
@@ -20,13 +22,16 @@
     S _ `compare` Z    =  GT
     S x `compare` S y  =  x `compare` y
 
+maybeSubtract :: Natural -> Natural -> Maybe Natural
+a   `maybeSubtract` Z   = Just a
+S a `maybeSubtract` S b = a `maybeSubtract` b
+_   `maybeSubtract` _   = Nothing
+
 instance Num Natural where
     Z   + y  =  y
     S x + y  =  S (x + y)
 
-    x   - Z    =  x
-    Z   - S _  =  error "Natural: (-)"
-    S x - S y  =  x - y
+    x   - y  = fromMaybe (error "Natural: (-)") (x `maybeSubtract` y)
 
     Z   * y  =  Z
     S x * y  =  y + x * y
@@ -56,8 +61,16 @@
     toRational = toRational . toInteger
 
 instance Enum Natural where
+    succ = (+1)
+    pred = (subtract 1)
     toEnum = fromIntegral
     fromEnum = fromIntegral
+    enumFromThenTo from thn to = go from (to `maybeSubtract` from) where
+      go from Nothing      = []
+      go from (Just count) = from:go (thn + from) (count `maybeSubtract` thn)
+    enumFrom a       = enumFromThenTo a 1 infinity
+    enumFromThen a b = enumFromThenTo a b infinity
+    enumFromTo a c   = enumFromThenTo a 1 c
 
 -- | The infinite natural number.
 infinity :: Natural
diff --git a/numbers.cabal b/numbers.cabal
--- a/numbers.cabal
+++ b/numbers.cabal
@@ -1,5 +1,5 @@
 Name:		numbers
-Version:	2008.4.20.1
+Version:	2009.5.18.1
 License:	BSD3
 Author:		Lennart Augustsson
 Maintainer:	Lennart Augustsson
