diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,6 @@
+- 0.1.2.1
+    - Use `unexpected` instead of `fail`
+
 - 0.1.2.0
     - add `month`
     - fix pre BCE parsing
diff --git a/src/Data/Time/Parsers.hs b/src/Data/Time/Parsers.hs
--- a/src/Data/Time/Parsers.hs
+++ b/src/Data/Time/Parsers.hs
@@ -22,24 +22,25 @@
     , DateParsing
     ) where
 
-import Control.Applicative   (optional, some, (<|>))
-import Control.Monad         (void, when)
-import Data.Bits             ((.&.))
-import Data.Char             (isDigit, ord)
-import Data.Fixed            (Pico)
-import Data.Int              (Int64)
-import Data.List             (foldl')
-import Data.Maybe            (fromMaybe)
-import Data.Time.Calendar    (Day, fromGregorianValid)
-import Data.Time.Clock       (UTCTime (..))
-import Text.Parser.Char      (CharParsing (..), digit)
-import Text.Parser.LookAhead (LookAheadParsing (..))
-import Unsafe.Coerce         (unsafeCoerce)
+import Control.Applicative     (optional, some, (<|>))
+import Control.Monad           (void, when)
+import Data.Bits               ((.&.))
+import Data.Char               (isDigit, ord)
+import Data.Fixed              (Pico)
+import Data.Int                (Int64)
+import Data.List               (foldl')
+import Data.Maybe              (fromMaybe)
+import Data.Time.Calendar      (Day, fromGregorianValid)
+import Data.Time.Clock         (UTCTime (..))
+import Text.Parser.Char        (CharParsing (..), digit)
+import Text.Parser.Combinators (unexpected)
+import Text.Parser.LookAhead   (LookAheadParsing (..))
+import Unsafe.Coerce           (unsafeCoerce)
 
 import qualified Data.Time.LocalTime as Local
 
 #if !MIN_VERSION_base(4,8,0)
-import Control.Applicative ((*>), (<$>), (<$), (<*), (<*>))
+import Control.Applicative ((*>), (<$), (<$>), (<*), (<*>))
 #endif
 
 type DateParsing m = (CharParsing m, LookAheadParsing m, Monad m)
@@ -56,7 +57,7 @@
   m <- twoDigits
   if (1 <= m && m <= 12)
       then return (s y, m)
-      else fail "Invalid month"
+      else unexpected "Invalid month"
 {-# INLINE month #-}
 
 -- | Parse a date of the form @YYYY-MM-DD@.
@@ -68,7 +69,7 @@
   m <- twoDigits
   _ <- char '-'
   d <- twoDigits
-  maybe (fail "invalid date") return (fromGregorianValid (s y) m d)
+  maybe (unexpected "invalid date") return (fromGregorianValid (s y) m d)
 
 -- | Parse a two-digit integer (e.g. day of month, hour).
 twoDigits :: DateParsing m => m Int
@@ -86,7 +87,7 @@
   s <- seconds
   if h < 24 && m < 60 && s < 61
     then return (Local.TimeOfDay h m s)
-    else fail "invalid time"
+    else unexpected "invalid time"
 
 data T = T {-# UNPACK #-} !Int {-# UNPACK #-} !Int64
 
@@ -131,7 +132,7 @@
         _   | off == 0 ->
               return Nothing
             | off < -720 || off > 840 || m > 59 ->
-              fail "invalid time zone offset"
+              unexpected "invalid time zone offset"
             | otherwise ->
               let !tz = Local.minutesToTimeZone off
               in return (Just tz)
diff --git a/time-parsers.cabal b/time-parsers.cabal
--- a/time-parsers.cabal
+++ b/time-parsers.cabal
@@ -1,60 +1,64 @@
-name:           time-parsers
-version:        0.1.2.0
-synopsis:       Parsers for types in `time`.
+cabal-version:      >=1.10
+name:               time-parsers
+version:            0.1.2.1
+synopsis:           Parsers for types in `time`.
+category:           Parsing
 description:
   Parsers for types in `time` using 'parser' library.
   .
   Originally forked from aeson parsers.
-category:       Parsing
-homepage:       https://github.com/phadej/time-parsers#readme
-bug-reports:    https://github.com/phadej/time-parsers/issues
-author:         Oleg Grenrus <oleg.grenrus@iki.fi>
-maintainer:     Oleg Grenrus <oleg.grenrus@iki.fi>
-license:        BSD3
-license-file:   LICENSE
-tested-with:    GHC==7.6.3, GHC==7.8.4, GHC==7.10.3, GHC==8.0.1
-build-type:     Simple
-cabal-version:  >= 1.10
+  .
+  See also <http://hackage.haskell.org/package/attoparsec-iso8601 attoparsec-iso-8601> package.
 
+homepage:           https://github.com/phadej/time-parsers#readme
+bug-reports:        https://github.com/phadej/time-parsers/issues
+author:             Oleg Grenrus <oleg.grenrus@iki.fi>
+maintainer:         Oleg Grenrus <oleg.grenrus@iki.fi>
+license:            BSD3
+license-file:       LICENSE
+tested-with:
+  GHC ==8.8.1 || ==8.6.5 || ==8.4.4 || ==8.2.2 || ==8.0.2 || ==7.10.3 || ==7.8.4 || ==7.6.3
+
+build-type:         Simple
 extra-source-files:
-    CHANGELOG.md
-    README.md
+  CHANGELOG.md
+  README.md
 
 source-repository head
-  type: git
+  type:     git
   location: https://github.com/phadej/time-parsers
 
 library
-  hs-source-dirs:
-      src
-  ghc-options: -Wall
+  hs-source-dirs:   src
+  ghc-options:      -Wall
   build-depends:
-      base             >=4.6      && <4.10
-    , parsers          >=0.12.2.1 && <0.13
-    , template-haskell >=2.8.0.0  && <2.12
-    , time             >=1.4.2    && <1.7
+      base              >=4.6      && <4.13
+    , parsers           >=0.12.2.1 && <0.13
+    , template-haskell  >=2.8.0.0  && <2.15
+    , time              >=1.4.0.1  && <1.9
+
   exposed-modules:
-      Data.Time.Parsers
-      Data.Time.TH
+    Data.Time.Parsers
+    Data.Time.TH
+
   default-language: Haskell2010
 
 test-suite date-parsers-tests
-  type: exitcode-stdio-1.0
-  main-is: Tests.hs
-  hs-source-dirs:
-      test
-  ghc-options: -Wall
+  type:             exitcode-stdio-1.0
+  main-is:          Tests.hs
+  hs-source-dirs:   test
+  ghc-options:      -Wall
   build-depends:
-      base
-    , parsers
+      attoparsec        >=0.12.1.6 && <0.14
+    , base
+    , bifunctors        >=4.2.1    && <5.6
+    , parsec            >=3.1.9    && <3.2
+    , parsers           >=0.12.3   && <0.13
+    , tasty             >=0.10.1.2 && <1.3
+    , tasty-hunit       >=0.9.2    && <0.11
     , template-haskell
+    , text
     , time
     , time-parsers
-    , attoparsec    >=0.12.1.6 && <0.14
-    , bifunctors    >=4.2.1    && <5.5
-    , parsec        >=3.1.9    && <3.2
-    , parsers       >=0.12.3   && <0.13
-    , tasty         >=0.10.1.2 && <0.12
-    , tasty-hunit   >=0.9.2    && <0.10
-    , text
+
   default-language: Haskell2010
