diff --git a/Data/Dates.hs b/Data/Dates.hs
--- a/Data/Dates.hs
+++ b/Data/Dates.hs
@@ -5,7 +5,8 @@
    Time (..),
    parseDate,
    pDate,
-   getCurrentDateTime
+   getCurrentDateTime,
+   tryRead
   ) where
 
 import Prelude.Unicode
@@ -65,6 +66,13 @@
     tSecond ∷ Int }
   deriving (Eq,Ord,Show,Data,Typeable)
 
+-- | Parser version of Prelude.read
+tryRead :: Read a => String -> Parsec String st a
+tryRead str =
+  case reads str of
+    [(res, "")] -> return res
+    _ -> fail $ "Cannot read: " ++ str
+
 -- | Get current date and time.
 getCurrentDateTime ∷  IO DateTime
 getCurrentDateTime = do
@@ -115,7 +123,7 @@
                                
 number ∷ Int → Int → Parsec String st Int
 number n m = do
-  t ← read `fmap` (n `times` digit)
+  t ← tryRead =<< (n `times` digit)
   if t > m
     then fail "number too large"
     else return t
@@ -273,7 +281,7 @@
 pDateInterval ∷ Parsec String st DateIntervalType
 pDateInterval = do
   s ← choice $ map maybePlural ["day", "week", "month", "year"]
-  return $ read s
+  tryRead s
 
 pRelDate ∷ DateTime → Parsec String st DateTime
 pRelDate date = do
@@ -287,10 +295,10 @@
   char ' '
   tp ← pDateInterval
   case tp of
-    Day →   return $ Days (read n)
-    Week →  return $ Weeks (read n)
-    Month → return $ Months (read n)
-    Year →  return $ Years (read n)
+    Day →   Days   `fmap` tryRead n
+    Week →  Weeks  `fmap` tryRead n
+    Month → Months `fmap` tryRead n
+    Year →  Years  `fmap` tryRead n
 
 passDate ∷ Parsec String st DateInterval
 passDate = do
@@ -299,10 +307,10 @@
   tp ← pDateInterval
   string " ago"
   case tp of
-    Day →   return $ Days $ - (read n)
-    Week →  return $ Weeks $ - (read n)
-    Month → return $ Months $ - (read n)
-    Year →  return $ Years $ - (read n)
+    Day →   (Days   . negate) `fmap` tryRead n
+    Week →  (Weeks  . negate) `fmap` tryRead n
+    Month → (Months . negate) `fmap` tryRead n
+    Year →  (Years  . negate) `fmap` tryRead n
 
 today ∷ Parsec String st DateInterval
 today = do
diff --git a/dates.cabal b/dates.cabal
--- a/dates.cabal
+++ b/dates.cabal
@@ -1,5 +1,5 @@
 name:                dates
-version:             0.1.1.0
+version:             0.1.1.1
 synopsis:            Small library for parsing different dates formats.
 description:         This package allows to parse many different formats
                      of dates. Both absolute and relative dates are supported.
