on master help sign in
Allow building with base-compat-0.11.0

`base-compat-0.11.0` makes `Prelude.fail` refer to `Control.Monad.Fail.fail`, not `Control.Monad.fail`, to mirror the API that GHC 8.8's version of `base` offers. One consequence of this change is that `aeson-1.4.4.0` does not compile out of the box with `base-compat-0.11.0`. Luckily, this can be rectified in a way that is backwards-compatible with earlier versions of `base-compat` by making more use of qualified imports, which this patch accomplishes.

commit8e3e6a1527e3fa773bd0bc6feb347d7ce17c258e authorRyan Scott <ryan.gl.scott@gmail.com> dateFri 6 Sep 2019, 17:07 (7 years ago) parentdd80afd
5 files changed+9−7
Data/Aeson/Types/Internal.hs+4−3 aeson.cabal+1−1 attoparsec-iso8601/attoparsec-iso8601.cabal+1−1 benchmarks/AesonEncode.hs+1−1 benchmarks/Compare/JsonBench.hs+2−1
Data/Aeson/Types/Internal.hs+4−3
@@ -99,6 +99,7 @@ import Data.Time.Format (FormatTime)
9999import Data.Typeable (Typeable)
100100import Data.Vector (Vector)
101101import GHC.Generics (Generic)
102+import qualified Control.Monad as Monad
102103import qualified Control.Monad.Fail as Fail
103104import qualified Data.HashMap.Strict as H
104105import qualified Data.Scientific as S
@@ -152,7 +153,7 @@ instance Functor Result where
152153 fmap _ (Error err) = Error err
153154 {-# INLINE fmap #-}
154155
155−instance Monad IResult where
156+instance Monad.Monad IResult where
156157 return = pure
157158 {-# INLINE return #-}
158159
@@ -169,7 +170,7 @@ instance Fail.MonadFail IResult where
169170 fail err = IError [] err
170171 {-# INLINE fail #-}
171172
172−instance Monad Result where
173+instance Monad.Monad Result where
173174 return = pure
174175 {-# INLINE return #-}
175176
@@ -288,7 +289,7 @@ newtype Parser a = Parser {
288289 -> f r
289290 }
290291
291−instance Monad Parser where
292+instance Monad.Monad Parser where
292293 m >>= g = Parser $ \path kf ks -> let ks' a = runParser (g a) path kf ks
293294 in runParser m path kf ks'
294295 {-# INLINE (>>=) #-}
aeson.cabal+1−1
@@ -116,7 +116,7 @@ library
116116
117117 -- Compat
118118 build-depends:
119− base-compat >= 0.9.1 && < 0.11,
119+ base-compat >= 0.9.1 && < 0.12,
120120 time-compat >= 1.9.2.2 && < 1.10
121121
122122 if flag(bytestring-builder)
attoparsec-iso8601/attoparsec-iso8601.cabal+1−1
@@ -37,7 +37,7 @@ library
3737 build-depends:
3838 attoparsec >= 0.13.0.1,
3939 base >= 4.5 && < 5,
40− base-compat >= 0.9.1 && < 0.11,
40+ base-compat >= 0.9.1 && < 0.12,
4141 text >= 1.1.1.0,
4242 time >= 1.1.1.4
4343
benchmarks/AesonEncode.hs+1−1
@@ -7,7 +7,7 @@ module Main (main) where
77import Prelude.Compat
88
99import Control.DeepSeq
10−import Control.Monad
10+import Control.Monad (forM_)
1111import Data.Aeson
1212import Data.Attoparsec.ByteString (IResult(..), parseWith)
1313import Data.Char (isDigit)
benchmarks/Compare/JsonBench.hs+2−1
@@ -20,6 +20,7 @@ import Data.Aeson ((.:))
2020import Data.Monoid ((<>))
2121import Data.Text (Text)
2222import Typed.Common (load)
23+import qualified Control.Monad.Fail as Fail
2324import qualified Data.Aeson as Aeson
2425import qualified Data.BufferBuilder.Json as Json
2526
@@ -82,7 +83,7 @@ genderTable = [("male", Male), ("female", Female)]
8283fruitTable :: [(Text, Fruit)]
8384fruitTable = [("apple", Apple), ("strawberry", Strawberry), ("banana", Banana)]
8485
85−enumFromJson :: Monad m => String -> [(Text, enum)] -> (json -> m Text) -> json -> m enum
86+enumFromJson :: Fail.MonadFail m => String -> [(Text, enum)] -> (json -> m Text) -> json -> m enum
8687enumFromJson enumName table extract v = do
8788 s <- extract v
8889 case lookup s table of