@@ -56,6 +56,7 @@ module Data.Aeson.Types.Internal
56import Control.Applicative
56import Control.Applicative
57import Control.DeepSeq (NFData(..))
57import Control.DeepSeq (NFData(..))
58import Control.Monad (MonadPlus(..), ap)
58import Control.Monad (MonadPlus(..), ap)
59+import qualified Control.Monad.Fail as Fail
59import Data.ByteString.Builder (Builder, char7, toLazyByteString)
60import Data.ByteString.Builder (Builder, char7, toLazyByteString)
60import Data.Char (isLower, isUpper, toLower)
61import Data.Char (isLower, isUpper, toLower)
61import Data.Data (Data)
62import Data.Data (Data)
@@ -122,35 +123,43 @@ instance Functor Result where
122 {-# INLINE fmap #-}
123 {-# INLINE fmap #-}
124instance Monad IResult where
125instance Monad IResult where
125− return = ISuccess
126+ return = pure
126 {-# INLINE return #-}
127 {-# INLINE return #-}
128 ISuccess a >>= k = k a
129 ISuccess a >>= k = k a
129 IError path err >>= _ = IError path err
130 IError path err >>= _ = IError path err
130 {-# INLINE (>>=) #-}
131 {-# INLINE (>>=) #-}
136+instance Fail.MonadFail IResult where
132 fail err = IError [] err
137 fail err = IError [] err
133 {-# INLINE fail #-}
138 {-# INLINE fail #-}
135instance Monad Result where
140instance Monad Result where
136− return = Success
141+ return = pure
137 {-# INLINE return #-}
142 {-# INLINE return #-}
139 Success a >>= k = k a
144 Success a >>= k = k a
140 Error err >>= _ = Error err
145 Error err >>= _ = Error err
141 {-# INLINE (>>=) #-}
146 {-# INLINE (>>=) #-}
151+instance Fail.MonadFail Result where
143 fail err = Error err
152 fail err = Error err
144 {-# INLINE fail #-}
153 {-# INLINE fail #-}
146instance Applicative IResult where
155instance Applicative IResult where
147− pure = return
156+ pure = ISuccess
148 {-# INLINE pure #-}
157 {-# INLINE pure #-}
149 (<*>) = ap
158 (<*>) = ap
150 {-# INLINE (<*>) #-}
159 {-# INLINE (<*>) #-}
152instance Applicative Result where
161instance Applicative Result where
153− pure = return
162+ pure = Success
154 {-# INLINE pure #-}
163 {-# INLINE pure #-}
155 (<*>) = ap
164 (<*>) = ap
156 {-# INLINE (<*>) #-}
165 {-# INLINE (<*>) #-}
@@ -239,8 +248,12 @@ instance Monad Parser where
239 m >>= g = Parser $ \path kf ks -> let ks' a = runParser (g a) path kf ks
248 m >>= g = Parser $ \path kf ks -> let ks' a = runParser (g a) path kf ks
240 in runParser m path kf ks'
249 in runParser m path kf ks'
241 {-# INLINE (>>=) #-}
250 {-# INLINE (>>=) #-}
242− return a = Parser $ \_path _kf ks -> ks a
251+ return = pure
243 {-# INLINE return #-}
252 {-# INLINE return #-}
256+instance Fail.MonadFail Parser where
244 fail msg = Parser $ \path kf _ks -> kf (reverse path) msg
257 fail msg = Parser $ \path kf _ks -> kf (reverse path) msg
245 {-# INLINE fail #-}
258 {-# INLINE fail #-}
@@ -250,7 +263,7 @@ instance Functor Parser where
250 {-# INLINE fmap #-}
263 {-# INLINE fmap #-}
252instance Applicative Parser where
265instance Applicative Parser where
253− pure = return
266+ pure a = Parser $ \_path _kf ks -> ks a
254 {-# INLINE pure #-}
267 {-# INLINE pure #-}
255 (<*>) = apP
268 (<*>) = apP
256 {-# INLINE (<*>) #-}
269 {-# INLINE (<*>) #-}