@@ -16,6 +16,8 @@ module Data.Aeson
1616 -- * Encoding and decoding
1717 decode
1818 , decode'
19+ , eitherDecode
20+ , eitherDecode'
1921 , encode
2022 -- * Core JSON types
2123 , Value(..)
@@ -46,7 +48,7 @@ module Data.Aeson
4648 ) where
4749
4850import Data.Aeson.Encode (encode)
49−import Data.Aeson.Parser.Internal (decodeWith, json, json')
51+import Data.Aeson.Parser.Internal (decodeWith, eitherDecodeWith, json, json')
5052import Data.Aeson.Types
5153import qualified Data.ByteString.Lazy as L
5254
@@ -69,3 +71,13 @@ decode = decodeWith json fromJSON
6971decode' :: (FromJSON a) => L.ByteString -> Maybe a
7072decode' = decodeWith json' fromJSON
7173{-# INLINE decode' #-}
74+
75+-- | Like 'decode' but returns an error message when decoding fails.
76+eitherDecode :: (FromJSON a) => L.ByteString -> Either String a
77+eitherDecode = eitherDecodeWith json fromJSON
78+{-# INLINE eitherDecode #-}
79+
80+-- | Like 'decode'' but returns an error message when decoding fails.
81+eitherDecode' :: (FromJSON a) => L.ByteString -> Either String a
82+eitherDecode' = eitherDecodeWith json' fromJSON
83+{-# INLINE eitherDecode' #-}