@@ -1,9 +1,19 @@
1+{-# LANGUAGE BangPatterns #-}
1{-# LANGUAGE DataKinds #-}
2{-# LANGUAGE DataKinds #-}
3+{-# LANGUAGE DeriveDataTypeable #-}
4+{-# LANGUAGE DeriveGeneric #-}
5+{-# LANGUAGE DeriveLift #-}
6+{-# LANGUAGE FlexibleInstances #-}
7+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
2{-# LANGUAGE LambdaCase #-}
8{-# LANGUAGE LambdaCase #-}
9+{-# LANGUAGE MultiParamTypeClasses #-}
3{-# LANGUAGE OverloadedStrings #-}
10{-# LANGUAGE OverloadedStrings #-}
4{-# LANGUAGE QuasiQuotes #-}
11{-# LANGUAGE QuasiQuotes #-}
12+{-# LANGUAGE RankNTypes #-}
5{-# LANGUAGE RecordWildCards #-}
13{-# LANGUAGE RecordWildCards #-}
6{-# LANGUAGE RoleAnnotations #-}
14{-# LANGUAGE RoleAnnotations #-}
15+{-# LANGUAGE ScopedTypeVariables #-}
16+{-# LANGUAGE StandaloneDeriving #-}
7{-# LANGUAGE TemplateHaskellQuotes #-}
17{-# LANGUAGE TemplateHaskellQuotes #-}
8{-# LANGUAGE TypeFamilies #-}
18{-# LANGUAGE TypeFamilies #-}
9{-# LANGUAGE UndecidableInstances #-}
19{-# LANGUAGE UndecidableInstances #-}
@@ -203,7 +213,7 @@ module Network.HTTP.Req
206−import Blaze.ByteString.Builder qualified as BB
216+import qualified Blaze.ByteString.Builder as BB
207import Control.Applicative
217import Control.Applicative
208import Control.Arrow (first, second)
218import Control.Arrow (first, second)
209import Control.Exception hiding (Handler (..), TypeError)
219import Control.Exception hiding (Handler (..), TypeError)
@@ -219,56 +229,55 @@ import Control.Monad.Trans.Control
219import Control.Monad.Trans.Except (ExceptT)
229import Control.Monad.Trans.Except (ExceptT)
220import Control.Monad.Trans.Identity (IdentityT)
230import Control.Monad.Trans.Identity (IdentityT)
221import Control.Monad.Trans.Maybe (MaybeT)
231import Control.Monad.Trans.Maybe (MaybeT)
222−import Control.Monad.Trans.RWS.CPS qualified as RWS.CPS
232+import qualified Control.Monad.Trans.RWS.CPS as RWS.CPS
223−import Control.Monad.Trans.RWS.Lazy qualified as RWS.Lazy
233+import qualified Control.Monad.Trans.RWS.Lazy as RWS.Lazy
224−import Control.Monad.Trans.RWS.Strict qualified as RWS.Strict
234+import qualified Control.Monad.Trans.RWS.Strict as RWS.Strict
225import Control.Monad.Trans.Select (SelectT)
235import Control.Monad.Trans.Select (SelectT)
226−import Control.Monad.Trans.State.Lazy qualified as State.Lazy
236+import qualified Control.Monad.Trans.State.Lazy as State.Lazy
227−import Control.Monad.Trans.State.Strict qualified as State.Strict
237+import qualified Control.Monad.Trans.State.Strict as State.Strict
228−import Control.Monad.Trans.Writer.CPS qualified as Writer.CPS
238+import qualified Control.Monad.Trans.Writer.CPS as Writer.CPS
229−import Control.Monad.Trans.Writer.Lazy qualified as Writer.Lazy
239+import qualified Control.Monad.Trans.Writer.Lazy as Writer.Lazy
230−import Control.Monad.Trans.Writer.Strict qualified as Writer.Strict
240+import qualified Control.Monad.Trans.Writer.Strict as Writer.Strict
231import Control.Retry
241import Control.Retry
232import Data.Aeson (FromJSON (..), ToJSON (..))
242import Data.Aeson (FromJSON (..), ToJSON (..))
233−import Data.Aeson qualified as A
243+import qualified Data.Aeson as A
234import Data.ByteString (ByteString)
244import Data.ByteString (ByteString)
235−import Data.ByteString qualified as B
245+import qualified Data.ByteString as B
236−import Data.ByteString.Lazy qualified as BL
246+import qualified Data.ByteString.Lazy as BL
237−import Data.CaseInsensitive qualified as CI
247+import qualified Data.CaseInsensitive as CI
238import Data.Data (Data)
248import Data.Data (Data)
239−import Data.Default.Class (def)
240import Data.Function (on)
249import Data.Function (on)
241import Data.IORef
250import Data.IORef
242import Data.Kind (Constraint, Type)
251import Data.Kind (Constraint, Type)
243import Data.List (foldl', nubBy)
252import Data.List (foldl', nubBy)
244import Data.List.NonEmpty (NonEmpty (..))
253import Data.List.NonEmpty (NonEmpty (..))
245−import Data.List.NonEmpty qualified as NE
254+import qualified Data.List.NonEmpty as NE
246import Data.Maybe (fromMaybe)
255import Data.Maybe (fromMaybe)
247import Data.Proxy
256import Data.Proxy
248import Data.Semigroup (Endo (..))
257import Data.Semigroup (Endo (..))
249−import Data.Set qualified as S
258+import qualified Data.Set as S
250import Data.Text (Text)
259import Data.Text (Text)
251−import Data.Text qualified as T
260+import qualified Data.Text as T
252−import Data.Text.Encoding qualified as T
261+import qualified Data.Text.Encoding as T
253import Data.Typeable (Typeable, cast)
262import Data.Typeable (Typeable, cast)
254import GHC.Generics
263import GHC.Generics
255import GHC.TypeLits
264import GHC.TypeLits
256−import Language.Haskell.TH qualified as TH
265+import qualified Language.Haskell.TH as TH
257−import Language.Haskell.TH.Quote qualified as TH
266+import qualified Language.Haskell.TH.Quote as TH
258−import Language.Haskell.TH.Syntax qualified as TH
267+import qualified Language.Haskell.TH.Syntax as TH
259−import Network.Connection qualified as NC
268+import qualified Network.Connection as NC
260−import Network.HTTP.Client qualified as L
269+import qualified Network.HTTP.Client as L
261−import Network.HTTP.Client.Internal qualified as LI
270+import qualified Network.HTTP.Client.Internal as LI
262−import Network.HTTP.Client.MultipartFormData qualified as LM
271+import qualified Network.HTTP.Client.MultipartFormData as LM
263−import Network.HTTP.Client.TLS qualified as L
272+import qualified Network.HTTP.Client.TLS as L
264−import Network.HTTP.Types qualified as Y
273+import qualified Network.HTTP.Types as Y
265import System.IO.Unsafe (unsafePerformIO)
274import System.IO.Unsafe (unsafePerformIO)
266import Text.URI (URI)
275import Text.URI (URI)
267−import Text.URI qualified as URI
276+import qualified Text.URI as URI
268−import Text.URI.QQ qualified as QQ
277+import qualified Text.URI.QQ as QQ
269−import Web.Authenticate.OAuth qualified as OAuth
278+import qualified Web.Authenticate.OAuth as OAuth
270import Web.FormUrlEncoded (FromForm (..), ToForm (..))
279import Web.FormUrlEncoded (FromForm (..), ToForm (..))
271−import Web.FormUrlEncoded qualified as Form
280+import qualified Web.FormUrlEncoded as Form
272import Web.HttpApiData (ToHttpApiData (..))
281import Web.HttpApiData (ToHttpApiData (..))
274----------------------------------------------------------------------------
283----------------------------------------------------------------------------
@@ -585,10 +594,10 @@ req' method url body options m = do
585 withReqManager (m request)
594 withReqManager (m request)
587-- | Perform an action using the global implicit 'L.Manager' that the rest
596-- | Perform an action using the global implicit 'L.Manager' that the rest
588−-- of the library uses. This allows us to reuse connections that the
597+-- of the library uses. This allows to reuse connections that the
589-- 'L.Manager' controls.
598-- 'L.Manager' controls.
590withReqManager :: (MonadIO m) => (L.Manager -> m a) -> m a
599withReqManager :: (MonadIO m) => (L.Manager -> m a) -> m a
591−withReqManager m = m globalManager
600+withReqManager m = liftIO (readIORef globalManager) >>= m
593-- | The global 'L.Manager' that 'req' uses. Here we just go with the
602-- | The global 'L.Manager' that 'req' uses. Here we just go with the
594-- default settings, so users don't need to deal with this manager stuff at
603-- default settings, so users don't need to deal with this manager stuff at
@@ -601,16 +610,16 @@ withReqManager m = m globalManager
601-- manager. From that moment on the 'IORef' will be just reused—exactly the
610-- manager. From that moment on the 'IORef' will be just reused—exactly the
602-- behavior we want here in order to maximize connection sharing. GHC could
611-- behavior we want here in order to maximize connection sharing. GHC could
603-- spoil the plan by inlining the definition, hence the @NOINLINE@ pragma.
612-- spoil the plan by inlining the definition, hence the @NOINLINE@ pragma.
604−globalManager :: L.Manager
613+globalManager :: IORef L.Manager
605globalManager = unsafePerformIO $ do
614globalManager = unsafePerformIO $ do
606 context <- NC.initConnectionContext
615 context <- NC.initConnectionContext
607 let settings =
616 let settings =
608 L.mkManagerSettingsContext
617 L.mkManagerSettingsContext
609 (Just context)
618 (Just context)
610− def
619+ (NC.TLSSettingsSimple False False False)
612 manager <- L.newManager settings
621 manager <- L.newManager settings
613− return manager
622+ newIORef manager
614{-# NOINLINE globalManager #-}
623{-# NOINLINE globalManager #-}
616----------------------------------------------------------------------------
625----------------------------------------------------------------------------
@@ -716,6 +725,7 @@ data HttpConfig = HttpConfig
716 -- @since 3.6.0
725 -- @since 3.6.0
717 httpConfigBodyPreviewLength :: forall a. (Num a) => a
726 httpConfigBodyPreviewLength :: forall a. (Num a) => a
720-- | The default value of 'HttpConfig'.
730-- | The default value of 'HttpConfig'.
@@ -1024,7 +1034,7 @@ instance (HttpMethod method) => RequestComponent (Tagged "method" method) where
1024-- > -- https://%D1%8E%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4.%D1%80%D1%84
1034-- > -- https://%D1%8E%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4.%D1%80%D1%84
1025data Url (scheme :: Scheme) = Url Scheme (NonEmpty Text)
1035data Url (scheme :: Scheme) = Url Scheme (NonEmpty Text)
1026 -- NOTE The second value is the path segments in reversed order.
1036 -- NOTE The second value is the path segments in reversed order.
1027− deriving (Eq, Ord, Show, Data, Generic)
1037+ deriving (Eq, Ord, Show, Data, Typeable, Generic)
1029type role Url nominal
1039type role Url nominal
@@ -2011,7 +2021,7 @@ data HttpException
2011 | -- | A wrapper with Aeson-produced 'String' describing why decoding
2021 | -- | A wrapper with Aeson-produced 'String' describing why decoding
2012 -- failed
2022 -- failed
2013 JsonHttpException String
2023 JsonHttpException String
2014− deriving (Show, Generic)
2024+ deriving (Show, Typeable, Generic)
2016instance Exception HttpException
2026instance Exception HttpException
@@ -2048,4 +2058,4 @@ data Scheme
2049 | -- | HTTPS
2059 | -- | HTTPS
2051− deriving (Eq, Ord, Show, Data, Generic, TH.Lift)
2061+ deriving (Eq, Ord, Show, Data, Typeable, Generic, TH.Lift)