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.6.0.0
+version:             0.7.0.0
 synopsis:            Better error messages when decoding JSON values.
 license:             MIT
 license-file:        LICENSE
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
@@ -74,6 +74,7 @@
   -- * Miscellaneous
   , toAesonParser
   , toAesonParser'
+  , fromAesonParser
   , JSONType(..)
   , jsonTypeOf
   ) where
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
@@ -109,6 +109,16 @@
 toAesonParser' :: Parse' a -> A.Value -> A.Parser a
 toAesonParser' = toAesonParser absurd
 
+-- | Create a parser for any type, using its FromJSON instance.  Generally, you
+-- should prefer to write parsers using the other functions in this module;
+-- 'key', 'asString', etc, since they will usually generate better error
+-- messages. However this function is also useful occasionally.
+fromAesonParser :: A.FromJSON a => Parse e a
+fromAesonParser = liftParse $ \v ->
+  case A.fromJSON v of
+    A.Success x -> Right x
+    A.Error err -> Left (FromAeson err)
+
 -- | Data used internally by the 'Parse' type.
 data ParseReader = ParseReader
   { rdrPath  :: DList PathPiece
@@ -132,7 +142,12 @@
 -- | A value indicating that the JSON could not be decoded successfully.
 data ParseError err
   = InvalidJSON String
+    -- ^ Indicates a syntax error in the JSON string. Unfortunately, in this
+    -- case, Aeson's errors are not very helpful.
   | BadSchema [PathPiece] (ErrorSpecifics err)
+    -- ^ Indicates a decoding error; the input was parsed as JSON successfully,
+    -- but a value of the required type could not be constructed, perhaps
+    -- because of a missing key or type mismatch.
   deriving (Show, Eq, Functor)
 
 -- | The type of parse errors which never involve custom validation
@@ -147,6 +162,7 @@
   | OutOfBounds Int
   | WrongType JSONType A.Value -- ^ Expected type, actual value
   | ExpectedIntegral Double
+  | FromAeson String -- ^ An error arising inside a 'A.FromJSON' instance.
   | CustomError err
   deriving (Show, Eq, Functor)
 
@@ -207,6 +223,10 @@
   ]
 displaySpecifics _ (ExpectedIntegral x) =
   [ "Expected an integral value, got " <> tshow x ]
+displaySpecifics _ (FromAeson str) =
+  [ "Arising from an Aeson FromJSON instance:"
+  , T.pack str
+  ]
 displaySpecifics f (CustomError err) =
   [ f err ]
 
