@@ -1,9 +1,20 @@
1+{-# LANGUAGE BangPatterns #-}
1{-# LANGUAGE DataKinds #-}
3{-# LANGUAGE DataKinds #-}
4+{-# LANGUAGE DeriveDataTypeable #-}
5+{-# LANGUAGE DeriveGeneric #-}
6+{-# LANGUAGE DeriveLift #-}
7+{-# LANGUAGE FlexibleInstances #-}
8+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
2{-# LANGUAGE LambdaCase #-}
9{-# LANGUAGE LambdaCase #-}
10+{-# LANGUAGE MultiParamTypeClasses #-}
3{-# LANGUAGE OverloadedStrings #-}
11{-# LANGUAGE OverloadedStrings #-}
4{-# LANGUAGE QuasiQuotes #-}
12{-# LANGUAGE QuasiQuotes #-}
13+{-# LANGUAGE RankNTypes #-}
5{-# LANGUAGE RecordWildCards #-}
14{-# LANGUAGE RecordWildCards #-}
6{-# LANGUAGE RoleAnnotations #-}
15{-# LANGUAGE RoleAnnotations #-}
16+{-# LANGUAGE ScopedTypeVariables #-}
17+{-# LANGUAGE StandaloneDeriving #-}
7{-# LANGUAGE TemplateHaskellQuotes #-}
18{-# LANGUAGE TemplateHaskellQuotes #-}
8{-# LANGUAGE TypeFamilies #-}
19{-# LANGUAGE TypeFamilies #-}
9{-# LANGUAGE UndecidableInstances #-}
20{-# LANGUAGE UndecidableInstances #-}
@@ -150,7 +161,6 @@ module Network.HTTP.Req
150 -- *** Headers
161 -- *** Headers
152 attachHeader,
163 attachHeader,
155 -- *** Cookies
165 -- *** Cookies
156 -- $cookies
166 -- $cookies
@@ -203,72 +213,69 @@ 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)
210−import Control.Monad (guard, void, (>=>))
211import Control.Monad.Base
220import Control.Monad.Base
212import Control.Monad.Catch (Handler (..), MonadCatch, MonadMask, MonadThrow)
221import Control.Monad.Catch (Handler (..), MonadCatch, MonadMask, MonadThrow)
213import Control.Monad.IO.Class
222import Control.Monad.IO.Class
214import Control.Monad.IO.Unlift
223import Control.Monad.IO.Unlift
215−import Control.Monad.Reader (ReaderT (ReaderT), ask, lift, runReaderT)
224+import Control.Monad.Reader
216import Control.Monad.Trans.Accum (AccumT)
225import Control.Monad.Trans.Accum (AccumT)
217import Control.Monad.Trans.Cont (ContT)
226import Control.Monad.Trans.Cont (ContT)
218import Control.Monad.Trans.Control
227import Control.Monad.Trans.Control
219import Control.Monad.Trans.Except (ExceptT)
228import Control.Monad.Trans.Except (ExceptT)
220import Control.Monad.Trans.Identity (IdentityT)
229import Control.Monad.Trans.Identity (IdentityT)
221import Control.Monad.Trans.Maybe (MaybeT)
230import Control.Monad.Trans.Maybe (MaybeT)
222−import Control.Monad.Trans.RWS.CPS qualified as RWS.CPS
231+import qualified Control.Monad.Trans.RWS.CPS as RWS.CPS
223−import Control.Monad.Trans.RWS.Lazy qualified as RWS.Lazy
232+import qualified Control.Monad.Trans.RWS.Lazy as RWS.Lazy
224−import Control.Monad.Trans.RWS.Strict qualified as RWS.Strict
233+import qualified Control.Monad.Trans.RWS.Strict as RWS.Strict
225import Control.Monad.Trans.Select (SelectT)
234import Control.Monad.Trans.Select (SelectT)
226−import Control.Monad.Trans.State.Lazy qualified as State.Lazy
235+import qualified Control.Monad.Trans.State.Lazy as State.Lazy
227−import Control.Monad.Trans.State.Strict qualified as State.Strict
236+import qualified Control.Monad.Trans.State.Strict as State.Strict
228−import Control.Monad.Trans.Writer.CPS qualified as Writer.CPS
237+import qualified Control.Monad.Trans.Writer.CPS as Writer.CPS
229−import Control.Monad.Trans.Writer.Lazy qualified as Writer.Lazy
238+import qualified Control.Monad.Trans.Writer.Lazy as Writer.Lazy
230−import Control.Monad.Trans.Writer.Strict qualified as Writer.Strict
239+import qualified Control.Monad.Trans.Writer.Strict as Writer.Strict
231import Control.Retry
240import Control.Retry
232import Data.Aeson (FromJSON (..), ToJSON (..))
241import Data.Aeson (FromJSON (..), ToJSON (..))
233−import Data.Aeson qualified as A
242+import qualified Data.Aeson as A
234import Data.ByteString (ByteString)
243import Data.ByteString (ByteString)
235−import Data.ByteString qualified as B
244+import qualified Data.ByteString as B
236−import Data.ByteString.Lazy qualified as BL
245+import qualified Data.ByteString.Lazy as BL
237−import Data.CaseInsensitive qualified as CI
246+import qualified Data.CaseInsensitive as CI
238import Data.Data (Data)
247import Data.Data (Data)
239−import Data.Default.Class (def)
240import Data.Function (on)
248import Data.Function (on)
241import Data.IORef
249import Data.IORef
242import Data.Kind (Constraint, Type)
250import Data.Kind (Constraint, Type)
243import Data.List (foldl', nubBy)
251import Data.List (foldl', nubBy)
244import Data.List.NonEmpty (NonEmpty (..))
252import Data.List.NonEmpty (NonEmpty (..))
245−import Data.List.NonEmpty qualified as NE
253+import qualified Data.List.NonEmpty as NE
246import Data.Maybe (fromMaybe)
254import Data.Maybe (fromMaybe)
247import Data.Proxy
255import Data.Proxy
248import Data.Semigroup (Endo (..))
256import Data.Semigroup (Endo (..))
249−import Data.Set qualified as S
250import Data.Text (Text)
257import Data.Text (Text)
251−import Data.Text qualified as T
258+import qualified Data.Text as T
252−import Data.Text.Encoding qualified as T
259+import qualified Data.Text.Encoding as T
253import Data.Typeable (Typeable, cast)
260import Data.Typeable (Typeable, cast)
254import GHC.Generics
261import GHC.Generics
255import GHC.TypeLits
262import GHC.TypeLits
256−import Language.Haskell.TH qualified as TH
263+import qualified Language.Haskell.TH as TH
257−import Language.Haskell.TH.Quote qualified as TH
264+import qualified Language.Haskell.TH.Quote as TH
258−import Language.Haskell.TH.Syntax qualified as TH
265+import qualified Language.Haskell.TH.Syntax as TH
259−import Network.Connection qualified as NC
266+import qualified Network.Connection as NC
260−import Network.HTTP.Client qualified as L
267+import qualified Network.HTTP.Client as L
261−import Network.HTTP.Client.Internal qualified as LI
268+import qualified Network.HTTP.Client.Internal as LI
262−import Network.HTTP.Client.MultipartFormData qualified as LM
269+import qualified Network.HTTP.Client.MultipartFormData as LM
263−import Network.HTTP.Client.TLS qualified as L
270+import qualified Network.HTTP.Client.TLS as L
264−import Network.HTTP.Types qualified as Y
271+import qualified Network.HTTP.Types as Y
265import System.IO.Unsafe (unsafePerformIO)
272import System.IO.Unsafe (unsafePerformIO)
266import Text.URI (URI)
273import Text.URI (URI)
267−import Text.URI qualified as URI
274+import qualified Text.URI as URI
268−import Text.URI.QQ qualified as QQ
275+import qualified Text.URI.QQ as QQ
269−import Web.Authenticate.OAuth qualified as OAuth
276+import qualified Web.Authenticate.OAuth as OAuth
270import Web.FormUrlEncoded (FromForm (..), ToForm (..))
277import Web.FormUrlEncoded (FromForm (..), ToForm (..))
271−import Web.FormUrlEncoded qualified as Form
278+import qualified Web.FormUrlEncoded as Form
272import Web.HttpApiData (ToHttpApiData (..))
279import Web.HttpApiData (ToHttpApiData (..))
274----------------------------------------------------------------------------
281----------------------------------------------------------------------------
@@ -489,7 +496,7 @@ reqCb method url body responseProxy options adjustRequest =
490-- @since 3.7.0
497-- @since 3.7.0
491reqHandler ::
498reqHandler ::
492− (MonadHttp m) =>
499+ MonadHttp m =>
493 -- | How to get final result from a 'L.Response'
500 -- | How to get final result from a 'L.Response'
494 (L.Response L.BodyReader -> IO b) ->
501 (L.Response L.BodyReader -> IO b) ->
495 -- | 'L.Request' to perform
502 -- | 'L.Request' to perform
@@ -585,10 +592,10 @@ req' method url body options m = do
585 withReqManager (m request)
592 withReqManager (m request)
587-- | Perform an action using the global implicit 'L.Manager' that the rest
594-- | 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
595+-- of the library uses. This allows to reuse connections that the
589-- 'L.Manager' controls.
596-- 'L.Manager' controls.
590−withReqManager :: (MonadIO m) => (L.Manager -> m a) -> m a
597+withReqManager :: MonadIO m => (L.Manager -> m a) -> m a
591−withReqManager m = m globalManager
598+withReqManager m = liftIO (readIORef globalManager) >>= m
593-- | The global 'L.Manager' that 'req' uses. Here we just go with the
600-- | 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
601-- default settings, so users don't need to deal with this manager stuff at
@@ -601,16 +608,16 @@ withReqManager m = m globalManager
601-- manager. From that moment on the 'IORef' will be just reused—exactly the
608-- 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
609-- behavior we want here in order to maximize connection sharing. GHC could
603-- spoil the plan by inlining the definition, hence the @NOINLINE@ pragma.
610-- spoil the plan by inlining the definition, hence the @NOINLINE@ pragma.
604−globalManager :: L.Manager
611+globalManager :: IORef L.Manager
605globalManager = unsafePerformIO $ do
612globalManager = unsafePerformIO $ do
606 context <- NC.initConnectionContext
613 context <- NC.initConnectionContext
607 let settings =
614 let settings =
608 L.mkManagerSettingsContext
615 L.mkManagerSettingsContext
609 (Just context)
616 (Just context)
610− def
617+ (NC.TLSSettingsSimple False False False)
612 manager <- L.newManager settings
619 manager <- L.newManager settings
613− return manager
620+ newIORef manager
614{-# NOINLINE globalManager #-}
621{-# NOINLINE globalManager #-}
616----------------------------------------------------------------------------
623----------------------------------------------------------------------------
@@ -630,7 +637,7 @@ globalManager = unsafePerformIO $ do
630-- | A type class for monads that support performing HTTP requests.
637-- | A type class for monads that support performing HTTP requests.
631-- Typically, you only need to define the 'handleHttpException' method
638-- Typically, you only need to define the 'handleHttpException' method
632-- unless you want to tweak 'HttpConfig'.
639-- unless you want to tweak 'HttpConfig'.
633−class (MonadIO m) => MonadHttp m where
640+class MonadIO m => MonadHttp m where
634 -- | This method describes how to deal with 'HttpException' that was
641 -- | This method describes how to deal with 'HttpException' that was
635 -- caught by the library. One option is to re-throw it if you are OK with
642 -- caught by the library. One option is to re-throw it if you are OK with
636 -- exceptions, but if you prefer working with something like
643 -- exceptions, but if you prefer working with something like
@@ -714,8 +721,9 @@ data HttpConfig = HttpConfig
714 -- | Max length of preview fragment of response body.
721 -- | Max length of preview fragment of response body.
716 -- @since 3.6.0
723 -- @since 3.6.0
717− httpConfigBodyPreviewLength :: forall a. (Num a) => a
724+ httpConfigBodyPreviewLength :: forall a. Num a => a
720-- | The default value of 'HttpConfig'.
728-- | The default value of 'HttpConfig'.
@@ -803,27 +811,27 @@ instance (MonadHttp m, Monoid w) => MonadHttp (AccumT w m) where
803 getHttpConfig = lift getHttpConfig
811 getHttpConfig = lift getHttpConfig
805-- | @since 3.10.0
813-- | @since 3.10.0
806−instance (MonadHttp m) => MonadHttp (ContT r m) where
814+instance MonadHttp m => MonadHttp (ContT r m) where
807 handleHttpException = lift . handleHttpException
815 handleHttpException = lift . handleHttpException
808 getHttpConfig = lift getHttpConfig
816 getHttpConfig = lift getHttpConfig
810-- | @since 3.10.0
818-- | @since 3.10.0
811−instance (MonadHttp m) => MonadHttp (ExceptT e m) where
819+instance MonadHttp m => MonadHttp (ExceptT e m) where
812 handleHttpException = lift . handleHttpException
820 handleHttpException = lift . handleHttpException
813 getHttpConfig = lift getHttpConfig
821 getHttpConfig = lift getHttpConfig
815-- | @since 3.10.0
823-- | @since 3.10.0
816−instance (MonadHttp m) => MonadHttp (IdentityT m) where
824+instance MonadHttp m => MonadHttp (IdentityT m) where
817 handleHttpException = lift . handleHttpException
825 handleHttpException = lift . handleHttpException
818 getHttpConfig = lift getHttpConfig
826 getHttpConfig = lift getHttpConfig
820-- | @since 3.10.0
828-- | @since 3.10.0
821−instance (MonadHttp m) => MonadHttp (MaybeT m) where
829+instance MonadHttp m => MonadHttp (MaybeT m) where
822 handleHttpException = lift . handleHttpException
830 handleHttpException = lift . handleHttpException
823 getHttpConfig = lift getHttpConfig
831 getHttpConfig = lift getHttpConfig
825-- | @since 3.10.0
833-- | @since 3.10.0
826−instance (MonadHttp m) => MonadHttp (ReaderT r m) where
834+instance MonadHttp m => MonadHttp (ReaderT r m) where
827 handleHttpException = lift . handleHttpException
835 handleHttpException = lift . handleHttpException
828 getHttpConfig = lift getHttpConfig
836 getHttpConfig = lift getHttpConfig
@@ -843,17 +851,17 @@ instance (MonadHttp m, Monoid w) => MonadHttp (RWS.Strict.RWST r w s m) where
843 getHttpConfig = lift getHttpConfig
851 getHttpConfig = lift getHttpConfig
845-- | @since 3.10.0
853-- | @since 3.10.0
846−instance (MonadHttp m) => MonadHttp (SelectT r m) where
854+instance MonadHttp m => MonadHttp (SelectT r m) where
847 handleHttpException = lift . handleHttpException
855 handleHttpException = lift . handleHttpException
848 getHttpConfig = lift getHttpConfig
856 getHttpConfig = lift getHttpConfig
850-- | @since 3.10.0
858-- | @since 3.10.0
851−instance (MonadHttp m) => MonadHttp (State.Lazy.StateT s m) where
859+instance MonadHttp m => MonadHttp (State.Lazy.StateT s m) where
852 handleHttpException = lift . handleHttpException
860 handleHttpException = lift . handleHttpException
853 getHttpConfig = lift getHttpConfig
861 getHttpConfig = lift getHttpConfig
855-- | @since 3.10.0
863-- | @since 3.10.0
856−instance (MonadHttp m) => MonadHttp (State.Strict.StateT s m) where
864+instance MonadHttp m => MonadHttp (State.Strict.StateT s m) where
857 handleHttpException = lift . handleHttpException
865 handleHttpException = lift . handleHttpException
858 getHttpConfig = lift getHttpConfig
866 getHttpConfig = lift getHttpConfig
@@ -877,7 +885,7 @@ instance (MonadHttp m, Monoid w) => MonadHttp (Writer.Strict.WriterT w m) where
878-- @since 0.4.0
886-- @since 0.4.0
880− (MonadIO m) =>
888+ MonadIO m =>
881 -- | 'HttpConfig' to use
889 -- | 'HttpConfig' to use
882 HttpConfig ->
890 HttpConfig ->
883 -- | Computation to run
891 -- | Computation to run
@@ -982,7 +990,7 @@ class HttpMethod a where
982 -- | Return name of the method as a 'ByteString'.
990 -- | Return name of the method as a 'ByteString'.
983 httpMethodName :: Proxy a -> ByteString
991 httpMethodName :: Proxy a -> ByteString
985−instance (HttpMethod method) => RequestComponent (Tagged "method" method) where
993+instance HttpMethod method => RequestComponent (Tagged "method" method) where
986 getRequestMod _ = Endo $ \x ->
994 getRequestMod _ = Endo $ \x ->
987 x {L.method = httpMethodName (Proxy :: Proxy method)}
995 x {L.method = httpMethodName (Proxy :: Proxy method)}
@@ -1024,20 +1032,25 @@ 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
1032-- > -- 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)
1033data Url (scheme :: Scheme) = Url Scheme (NonEmpty Text)
1026 -- NOTE The second value is the path segments in reversed order.
1034 -- NOTE The second value is the path segments in reversed order.
1027− deriving (Eq, Ord, Show, Data, Generic)
1035+ deriving (Eq, Ord, Show, Data, Typeable, Generic)
1029type role Url nominal
1037type role Url nominal
1031-- With template-haskell >=2.15 and text >=1.2.4 Lift can be derived, however
1039-- With template-haskell >=2.15 and text >=1.2.4 Lift can be derived, however
1032-- the derived lift forgets the type of the scheme.
1040-- the derived lift forgets the type of the scheme.
1033−instance (Typeable scheme) => TH.Lift (Url scheme) where
1041+instance Typeable scheme => TH.Lift (Url scheme) where
1034 lift url =
1042 lift url =
1035 TH.dataToExpQ (fmap liftText . cast) url `TH.sigE` case url of
1043 TH.dataToExpQ (fmap liftText . cast) url `TH.sigE` case url of
1036 Url Http _ -> [t|Url 'Http|]
1044 Url Http _ -> [t|Url 'Http|]
1037 Url Https _ -> [t|Url 'Https|]
1045 Url Https _ -> [t|Url 'Https|]
1039 liftText t = TH.AppE (TH.VarE 'T.pack) <$> TH.lift (T.unpack t)
1047 liftText t = TH.AppE (TH.VarE 'T.pack) <$> TH.lift (T.unpack t)
1049+#if MIN_VERSION_template_haskell(2,17,0)
1040 liftTyped = TH.Code . TH.unsafeTExpCoerce . TH.lift
1050 liftTyped = TH.Code . TH.unsafeTExpCoerce . TH.lift
1051+#elif MIN_VERSION_template_haskell(2,16,0)
1052+ liftTyped = TH.unsafeTExpCoerce . TH.lift
1042-- | Given host name, produce a 'Url' which has “http” as its scheme and
1055-- | Given host name, produce a 'Url' which has “http” as its scheme and
1043-- empty path. This also sets port to @80@.
1056-- empty path. This also sets port to @80@.
@@ -1053,7 +1066,7 @@ https = Url Https . pure
1053-- path segment can be of any type that is an instance of 'ToHttpApiData'.
1066-- path segment can be of any type that is an instance of 'ToHttpApiData'.
1054infixl 5 /~
1067infixl 5 /~
1056−(/~) :: (ToHttpApiData a) => Url scheme -> a -> Url scheme
1069+(/~) :: ToHttpApiData a => Url scheme -> a -> Url scheme
1057Url secure path /~ segment = Url secure (NE.cons (toUrlPiece segment) path)
1070Url secure path /~ segment = Url secure (NE.cons (toUrlPiece segment) path)
1059-- | A type-constrained version of @('/~')@ to remove ambiguity in the cases
1072-- | A type-constrained version of @('/~')@ to remove ambiguity in the cases
@@ -1241,7 +1254,7 @@ instance HttpBody NoReqBody where
1241-- charset=utf-8\"@ value.
1254-- charset=utf-8\"@ value.
1242newtype ReqBodyJson a = ReqBodyJson a
1255newtype ReqBodyJson a = ReqBodyJson a
1244−instance (ToJSON a) => HttpBody (ReqBodyJson a) where
1257+instance ToJSON a => HttpBody (ReqBodyJson a) where
1245 getRequestBody (ReqBodyJson a) = L.RequestBodyLBS (A.encode a)
1258 getRequestBody (ReqBodyJson a) = L.RequestBodyLBS (A.encode a)
1246 getRequestContentType _ = pure "application/json; charset=utf-8"
1259 getRequestContentType _ = pure "application/json; charset=utf-8"
@@ -1340,7 +1353,7 @@ instance HttpBody ReqBodyMultipart where
1340-- | Create 'ReqBodyMultipart' request body from a collection of 'LM.Part's.
1353-- | Create 'ReqBodyMultipart' request body from a collection of 'LM.Part's.
1342-- @since 0.2.0
1355-- @since 0.2.0
1343−reqBodyMultipart :: (MonadIO m) => [LM.Part] -> m ReqBodyMultipart
1356+reqBodyMultipart :: MonadIO m => [LM.Part] -> m ReqBodyMultipart
1344reqBodyMultipart parts = liftIO $ do
1357reqBodyMultipart parts = liftIO $ do
1345 boundary <- LM.webkitBoundary
1358 boundary <- LM.webkitBoundary
1346 body <- LM.renderParts boundary parts
1359 body <- LM.renderParts boundary parts
@@ -1380,7 +1393,7 @@ type family
1380 TypeError
1393 TypeError
1381 ('Text "This HTTP method does not allow attaching a request body.")
1394 ('Text "This HTTP method does not allow attaching a request body.")
1383−instance (HttpBody body) => RequestComponent (Tagged "body" body) where
1396+instance HttpBody body => RequestComponent (Tagged "body" body) where
1384 getRequestMod (Tagged body) = Endo $ \x ->
1397 getRequestMod (Tagged body) = Endo $ \x ->
1386 { L.requestBody = getRequestBody body,
1399 { L.requestBody = getRequestBody body,
@@ -1450,7 +1463,7 @@ instance RequestComponent (Option scheme) where
1451-- | Finalize given 'L.Request' by applying a finalizer from the given
1464-- | Finalize given 'L.Request' by applying a finalizer from the given
1452-- 'Option' (if it has any).
1465-- 'Option' (if it has any).
1453−finalizeRequest :: (MonadIO m) => Option scheme -> L.Request -> m L.Request
1466+finalizeRequest :: MonadIO m => Option scheme -> L.Request -> m L.Request
1454finalizeRequest (Option _ mfinalizer) = liftIO . fromMaybe pure mfinalizer
1467finalizeRequest (Option _ mfinalizer) = liftIO . fromMaybe pure mfinalizer
1456----------------------------------------------------------------------------
1469----------------------------------------------------------------------------
@@ -1483,7 +1496,7 @@ name =: value = queryParam name (pure value)
1483-- This operator is defined in terms of 'queryParam':
1496-- This operator is defined in terms of 'queryParam':
1485-- > queryFlag name = queryParam name (Nothing :: Maybe ())
1498-- > queryFlag name = queryParam name (Nothing :: Maybe ())
1486−queryFlag :: (QueryParam param) => Text -> param
1499+queryFlag :: QueryParam param => Text -> param
1487queryFlag name = queryParam name (Nothing :: Maybe ())
1500queryFlag name = queryParam name (Nothing :: Maybe ())
1489-- | Construct query parameters from a 'ToForm' instance. This function
1502-- | Construct query parameters from a 'ToForm' instance. This function
@@ -1513,7 +1526,7 @@ class QueryParam param where
1513 -- 'Nothing', it won't be included at all (i.e. you create a flag this
1526 -- 'Nothing', it won't be included at all (i.e. you create a flag this
1514 -- way). It's recommended to use @('=:')@ and 'queryFlag' instead of this
1527 -- way). It's recommended to use @('=:')@ and 'queryFlag' instead of this
1515 -- method, because they are easier to read.
1528 -- method, because they are easier to read.
1516− queryParam :: (ToHttpApiData a) => Text -> Maybe a -> param
1529+ queryParam :: ToHttpApiData a => Text -> Maybe a -> param
1518 -- | Get the query parameter names and values set by 'queryParam'.
1531 -- | Get the query parameter names and values set by 'queryParam'.
@@ -1547,14 +1560,6 @@ attachHeader :: ByteString -> ByteString -> L.Request -> L.Request
1547attachHeader name value x =
1560attachHeader name value x =
1548 x {L.requestHeaders = (CI.mk name, value) : L.requestHeaders x}
1561 x {L.requestHeaders = (CI.mk name, value) : L.requestHeaders x}
1550−-- | Same as 'header', but with redacted values on print.
1553−headerRedacted :: ByteString -> ByteString -> Option scheme
1554−headerRedacted name value = withRequest $ \x ->
1555− let y = attachHeader name value x
1556− in y {L.redactHeaders = CI.mk name `S.insert` L.redactHeaders y}
1558----------------------------------------------------------------------------
1563----------------------------------------------------------------------------
1559-- Request—Optional parameters—Cookies
1564-- Request—Optional parameters—Cookies
@@ -1762,7 +1767,7 @@ ignoreResponse = Proxy
1762newtype JsonResponse a = JsonResponse (L.Response a)
1767newtype JsonResponse a = JsonResponse (L.Response a)
1763 deriving (Show)
1768 deriving (Show)
1765−instance (FromJSON a) => HttpResponse (JsonResponse a) where
1770+instance FromJSON a => HttpResponse (JsonResponse a) where
1766 type HttpResponseBody (JsonResponse a) = a
1771 type HttpResponseBody (JsonResponse a) = a
1767 toVanillaResponse (JsonResponse r) = r
1772 toVanillaResponse (JsonResponse r) = r
1768 getHttpResponse r = do
1773 getHttpResponse r = do
@@ -1878,14 +1883,14 @@ brReadN br n = go 0 id id
1879-- | Get the response body.
1884-- | Get the response body.
1880responseBody ::
1885responseBody ::
1881− (HttpResponse response) =>
1886+ HttpResponse response =>
1882 response ->
1887 response ->
1883 HttpResponseBody response
1888 HttpResponseBody response
1884responseBody = L.responseBody . toVanillaResponse
1889responseBody = L.responseBody . toVanillaResponse
1886-- | Get the response status code.
1891-- | Get the response status code.
1887responseStatusCode ::
1892responseStatusCode ::
1888− (HttpResponse response) =>
1893+ HttpResponse response =>
1889 response ->
1894 response ->
1891responseStatusCode =
1896responseStatusCode =
@@ -1893,7 +1898,7 @@ responseStatusCode =
1894-- | Get the response status message.
1899-- | Get the response status message.
1895responseStatusMessage ::
1900responseStatusMessage ::
1896− (HttpResponse response) =>
1901+ HttpResponse response =>
1897 response ->
1902 response ->
1898 ByteString
1903 ByteString
1899responseStatusMessage =
1904responseStatusMessage =
@@ -1901,7 +1906,7 @@ responseStatusMessage =
1902-- | Lookup a particular header from a response.
1907-- | Lookup a particular header from a response.
1903responseHeader ::
1908responseHeader ::
1904− (HttpResponse response) =>
1909+ HttpResponse response =>
1905 -- | Response interpretation
1910 -- | Response interpretation
1906 response ->
1911 response ->
1907 -- | Header to lookup
1912 -- | Header to lookup
@@ -1913,7 +1918,7 @@ responseHeader r h =
1914-- | Get the response 'L.CookieJar'.
1919-- | Get the response 'L.CookieJar'.
1915responseCookieJar ::
1920responseCookieJar ::
1916− (HttpResponse response) =>
1921+ HttpResponse response =>
1917 response ->
1922 response ->
1918 L.CookieJar
1923 L.CookieJar
1919responseCookieJar = L.responseCookieJar . toVanillaResponse
1924responseCookieJar = L.responseCookieJar . toVanillaResponse
@@ -2011,7 +2016,7 @@ data HttpException
2011 | -- | A wrapper with Aeson-produced 'String' describing why decoding
2016 | -- | A wrapper with Aeson-produced 'String' describing why decoding
2012 -- failed
2017 -- failed
2013 JsonHttpException String
2018 JsonHttpException String
2014− deriving (Show, Generic)
2019+ deriving (Show, Typeable, Generic)
2016instance Exception HttpException
2021instance Exception HttpException
@@ -2048,4 +2053,4 @@ data Scheme
2049 | -- | HTTPS
2054 | -- | HTTPS
2051− deriving (Eq, Ord, Show, Data, Generic, TH.Lift)
2056+ deriving (Eq, Ord, Show, Data, Typeable, Generic, TH.Lift)