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