diff --git a/aeson-better-errors.cabal b/aeson-better-errors.cabal
--- a/aeson-better-errors.cabal
+++ b/aeson-better-errors.cabal
@@ -1,5 +1,5 @@
 name:                aeson-better-errors
-version:             0.9.0.1
+version:             0.9.1.0
 synopsis:            Better error messages when decoding JSON values.
 license:             MIT
 license-file:        LICENSE
@@ -25,7 +25,7 @@
   exposed-modules:   Data.Aeson.BetterErrors
                      Data.Aeson.BetterErrors.Internal
   other-modules:     Data.Aeson.BetterErrors.Utils
-  build-depends:     base >=4 && <5
+  build-depends:     base >=4.5 && <5
                    , aeson >=0.7
                    , unordered-containers
                    , dlist
diff --git a/src/Data/Aeson/BetterErrors.hs b/src/Data/Aeson/BetterErrors.hs
--- a/src/Data/Aeson/BetterErrors.hs
+++ b/src/Data/Aeson/BetterErrors.hs
@@ -18,6 +18,7 @@
   , Parse'
   , mapError
   , (.!)
+  , (<|>)
 
   -- * Basic parsers
   , asValue
@@ -102,11 +103,3 @@
 
 import Data.Aeson (Value) -- for haddock
 import Data.Aeson.BetterErrors.Internal
-
--- TODO Alternative?
--- use monoid, combine errors?
--- Simply take rightmost?
--- Or maybe take the one with the deepest path?
---
--- Or, export our own (<|>) that uses a semigroup (since errors are
--- 'nonempty') - that is, we don't want to allow failing with no error.
diff --git a/src/Data/Aeson/BetterErrors/Internal.hs b/src/Data/Aeson/BetterErrors/Internal.hs
--- a/src/Data/Aeson/BetterErrors/Internal.hs
+++ b/src/Data/Aeson/BetterErrors/Internal.hs
@@ -78,6 +78,13 @@
 (.!) :: Functor m => ParseT err m a -> (err -> err') -> ParseT err' m a
 (.!) = flip mapError
 
+-- | First try the left parser, if that fails try the right.
+-- | If both fail, the error will come from the right one.
+(<|>) :: Monad m => ParseT err m a -> ParseT err m a -> ParseT err m a
+l <|> r = catchError l (const r)
+
+infixl 3 <|>
+
 -- | The type of parsers which never produce custom validation errors.
 type Parse' a = Parse Void a
 
@@ -214,7 +221,7 @@
   | TyNumber
   | TyBool
   | TyNull
-  deriving (Show, Eq, Ord)
+  deriving (Show, Eq, Ord, Enum, Bounded)
 
 displayJSONType :: JSONType -> Text
 displayJSONType t = case t of
