{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-unused-binds #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- Derived from AWS service descriptions, licensed under Apache 2.0.

-- |
-- Module      : Amazonka.AutoScaling.TerminateInstanceInAutoScalingGroup
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Terminates the specified instance and optionally adjusts the desired
-- group size. This operation cannot be called on instances in a warm pool.
--
-- This call simply makes a termination request. The instance is not
-- terminated immediately. When an instance is terminated, the instance
-- status changes to @terminated@. You can\'t connect to or start an
-- instance after you\'ve terminated it.
--
-- If you do not specify the option to decrement the desired capacity,
-- Amazon EC2 Auto Scaling launches instances to replace the ones that are
-- terminated.
--
-- By default, Amazon EC2 Auto Scaling balances instances across all
-- Availability Zones. If you decrement the desired capacity, your Auto
-- Scaling group can become unbalanced between Availability Zones. Amazon
-- EC2 Auto Scaling tries to rebalance the group, and rebalancing might
-- terminate instances in other zones. For more information, see
-- <https://docs.aws.amazon.com/autoscaling/ec2/userguide/auto-scaling-benefits.html#AutoScalingBehavior.InstanceUsage Rebalancing activities>
-- in the /Amazon EC2 Auto Scaling User Guide/.
module Amazonka.AutoScaling.TerminateInstanceInAutoScalingGroup
  ( -- * Creating a Request
    TerminateInstanceInAutoScalingGroup (..),
    newTerminateInstanceInAutoScalingGroup,

    -- * Request Lenses
    terminateInstanceInAutoScalingGroup_instanceId,
    terminateInstanceInAutoScalingGroup_shouldDecrementDesiredCapacity,

    -- * Destructuring the Response
    TerminateInstanceInAutoScalingGroupResponse (..),
    newTerminateInstanceInAutoScalingGroupResponse,

    -- * Response Lenses
    terminateInstanceInAutoScalingGroupResponse_activity,
    terminateInstanceInAutoScalingGroupResponse_httpStatus,
  )
where

import Amazonka.AutoScaling.Types
import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import qualified Amazonka.Prelude as Prelude
import qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response

-- | /See:/ 'newTerminateInstanceInAutoScalingGroup' smart constructor.
data TerminateInstanceInAutoScalingGroup = TerminateInstanceInAutoScalingGroup'
  { -- | The ID of the instance.
    TerminateInstanceInAutoScalingGroup -> Text
instanceId :: Prelude.Text,
    -- | Indicates whether terminating the instance also decrements the size of
    -- the Auto Scaling group.
    TerminateInstanceInAutoScalingGroup -> Bool
shouldDecrementDesiredCapacity :: Prelude.Bool
  }
  deriving (TerminateInstanceInAutoScalingGroup
-> TerminateInstanceInAutoScalingGroup -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: TerminateInstanceInAutoScalingGroup
-> TerminateInstanceInAutoScalingGroup -> Bool
$c/= :: TerminateInstanceInAutoScalingGroup
-> TerminateInstanceInAutoScalingGroup -> Bool
== :: TerminateInstanceInAutoScalingGroup
-> TerminateInstanceInAutoScalingGroup -> Bool
$c== :: TerminateInstanceInAutoScalingGroup
-> TerminateInstanceInAutoScalingGroup -> Bool
Prelude.Eq, ReadPrec [TerminateInstanceInAutoScalingGroup]
ReadPrec TerminateInstanceInAutoScalingGroup
Int -> ReadS TerminateInstanceInAutoScalingGroup
ReadS [TerminateInstanceInAutoScalingGroup]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [TerminateInstanceInAutoScalingGroup]
$creadListPrec :: ReadPrec [TerminateInstanceInAutoScalingGroup]
readPrec :: ReadPrec TerminateInstanceInAutoScalingGroup
$creadPrec :: ReadPrec TerminateInstanceInAutoScalingGroup
readList :: ReadS [TerminateInstanceInAutoScalingGroup]
$creadList :: ReadS [TerminateInstanceInAutoScalingGroup]
readsPrec :: Int -> ReadS TerminateInstanceInAutoScalingGroup
$creadsPrec :: Int -> ReadS TerminateInstanceInAutoScalingGroup
Prelude.Read, Int -> TerminateInstanceInAutoScalingGroup -> ShowS
[TerminateInstanceInAutoScalingGroup] -> ShowS
TerminateInstanceInAutoScalingGroup -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [TerminateInstanceInAutoScalingGroup] -> ShowS
$cshowList :: [TerminateInstanceInAutoScalingGroup] -> ShowS
show :: TerminateInstanceInAutoScalingGroup -> String
$cshow :: TerminateInstanceInAutoScalingGroup -> String
showsPrec :: Int -> TerminateInstanceInAutoScalingGroup -> ShowS
$cshowsPrec :: Int -> TerminateInstanceInAutoScalingGroup -> ShowS
Prelude.Show, forall x.
Rep TerminateInstanceInAutoScalingGroup x
-> TerminateInstanceInAutoScalingGroup
forall x.
TerminateInstanceInAutoScalingGroup
-> Rep TerminateInstanceInAutoScalingGroup x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep TerminateInstanceInAutoScalingGroup x
-> TerminateInstanceInAutoScalingGroup
$cfrom :: forall x.
TerminateInstanceInAutoScalingGroup
-> Rep TerminateInstanceInAutoScalingGroup x
Prelude.Generic)

-- |
-- Create a value of 'TerminateInstanceInAutoScalingGroup' with all optional fields omitted.
--
-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
--
-- The following record fields are available, with the corresponding lenses provided
-- for backwards compatibility:
--
-- 'instanceId', 'terminateInstanceInAutoScalingGroup_instanceId' - The ID of the instance.
--
-- 'shouldDecrementDesiredCapacity', 'terminateInstanceInAutoScalingGroup_shouldDecrementDesiredCapacity' - Indicates whether terminating the instance also decrements the size of
-- the Auto Scaling group.
newTerminateInstanceInAutoScalingGroup ::
  -- | 'instanceId'
  Prelude.Text ->
  -- | 'shouldDecrementDesiredCapacity'
  Prelude.Bool ->
  TerminateInstanceInAutoScalingGroup
newTerminateInstanceInAutoScalingGroup :: Text -> Bool -> TerminateInstanceInAutoScalingGroup
newTerminateInstanceInAutoScalingGroup
  Text
pInstanceId_
  Bool
pShouldDecrementDesiredCapacity_ =
    TerminateInstanceInAutoScalingGroup'
      { $sel:instanceId:TerminateInstanceInAutoScalingGroup' :: Text
instanceId =
          Text
pInstanceId_,
        $sel:shouldDecrementDesiredCapacity:TerminateInstanceInAutoScalingGroup' :: Bool
shouldDecrementDesiredCapacity =
          Bool
pShouldDecrementDesiredCapacity_
      }

-- | The ID of the instance.
terminateInstanceInAutoScalingGroup_instanceId :: Lens.Lens' TerminateInstanceInAutoScalingGroup Prelude.Text
terminateInstanceInAutoScalingGroup_instanceId :: Lens' TerminateInstanceInAutoScalingGroup Text
terminateInstanceInAutoScalingGroup_instanceId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\TerminateInstanceInAutoScalingGroup' {Text
instanceId :: Text
$sel:instanceId:TerminateInstanceInAutoScalingGroup' :: TerminateInstanceInAutoScalingGroup -> Text
instanceId} -> Text
instanceId) (\s :: TerminateInstanceInAutoScalingGroup
s@TerminateInstanceInAutoScalingGroup' {} Text
a -> TerminateInstanceInAutoScalingGroup
s {$sel:instanceId:TerminateInstanceInAutoScalingGroup' :: Text
instanceId = Text
a} :: TerminateInstanceInAutoScalingGroup)

-- | Indicates whether terminating the instance also decrements the size of
-- the Auto Scaling group.
terminateInstanceInAutoScalingGroup_shouldDecrementDesiredCapacity :: Lens.Lens' TerminateInstanceInAutoScalingGroup Prelude.Bool
terminateInstanceInAutoScalingGroup_shouldDecrementDesiredCapacity :: Lens' TerminateInstanceInAutoScalingGroup Bool
terminateInstanceInAutoScalingGroup_shouldDecrementDesiredCapacity = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\TerminateInstanceInAutoScalingGroup' {Bool
shouldDecrementDesiredCapacity :: Bool
$sel:shouldDecrementDesiredCapacity:TerminateInstanceInAutoScalingGroup' :: TerminateInstanceInAutoScalingGroup -> Bool
shouldDecrementDesiredCapacity} -> Bool
shouldDecrementDesiredCapacity) (\s :: TerminateInstanceInAutoScalingGroup
s@TerminateInstanceInAutoScalingGroup' {} Bool
a -> TerminateInstanceInAutoScalingGroup
s {$sel:shouldDecrementDesiredCapacity:TerminateInstanceInAutoScalingGroup' :: Bool
shouldDecrementDesiredCapacity = Bool
a} :: TerminateInstanceInAutoScalingGroup)

instance
  Core.AWSRequest
    TerminateInstanceInAutoScalingGroup
  where
  type
    AWSResponse TerminateInstanceInAutoScalingGroup =
      TerminateInstanceInAutoScalingGroupResponse
  request :: (Service -> Service)
-> TerminateInstanceInAutoScalingGroup
-> Request TerminateInstanceInAutoScalingGroup
request Service -> Service
overrides =
    forall a. ToRequest a => Service -> a -> Request a
Request.postQuery (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy TerminateInstanceInAutoScalingGroup
-> ClientResponse ClientBody
-> m (Either
        Error
        (ClientResponse (AWSResponse TerminateInstanceInAutoScalingGroup)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
Text
-> (Int
    -> ResponseHeaders -> [Node] -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveXMLWrapper
      Text
"TerminateInstanceInAutoScalingGroupResult"
      ( \Int
s ResponseHeaders
h [Node]
x ->
          Maybe Activity
-> Int -> TerminateInstanceInAutoScalingGroupResponse
TerminateInstanceInAutoScalingGroupResponse'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"Activity")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (forall (f :: * -> *) a. Applicative f => a -> f a
Prelude.pure (forall a. Enum a => a -> Int
Prelude.fromEnum Int
s))
      )

instance
  Prelude.Hashable
    TerminateInstanceInAutoScalingGroup
  where
  hashWithSalt :: Int -> TerminateInstanceInAutoScalingGroup -> Int
hashWithSalt
    Int
_salt
    TerminateInstanceInAutoScalingGroup' {Bool
Text
shouldDecrementDesiredCapacity :: Bool
instanceId :: Text
$sel:shouldDecrementDesiredCapacity:TerminateInstanceInAutoScalingGroup' :: TerminateInstanceInAutoScalingGroup -> Bool
$sel:instanceId:TerminateInstanceInAutoScalingGroup' :: TerminateInstanceInAutoScalingGroup -> Text
..} =
      Int
_salt
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
instanceId
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Bool
shouldDecrementDesiredCapacity

instance
  Prelude.NFData
    TerminateInstanceInAutoScalingGroup
  where
  rnf :: TerminateInstanceInAutoScalingGroup -> ()
rnf TerminateInstanceInAutoScalingGroup' {Bool
Text
shouldDecrementDesiredCapacity :: Bool
instanceId :: Text
$sel:shouldDecrementDesiredCapacity:TerminateInstanceInAutoScalingGroup' :: TerminateInstanceInAutoScalingGroup -> Bool
$sel:instanceId:TerminateInstanceInAutoScalingGroup' :: TerminateInstanceInAutoScalingGroup -> Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Text
instanceId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Bool
shouldDecrementDesiredCapacity

instance
  Data.ToHeaders
    TerminateInstanceInAutoScalingGroup
  where
  toHeaders :: TerminateInstanceInAutoScalingGroup -> ResponseHeaders
toHeaders = forall a b. a -> b -> a
Prelude.const forall a. Monoid a => a
Prelude.mempty

instance
  Data.ToPath
    TerminateInstanceInAutoScalingGroup
  where
  toPath :: TerminateInstanceInAutoScalingGroup -> ByteString
toPath = forall a b. a -> b -> a
Prelude.const ByteString
"/"

instance
  Data.ToQuery
    TerminateInstanceInAutoScalingGroup
  where
  toQuery :: TerminateInstanceInAutoScalingGroup -> QueryString
toQuery TerminateInstanceInAutoScalingGroup' {Bool
Text
shouldDecrementDesiredCapacity :: Bool
instanceId :: Text
$sel:shouldDecrementDesiredCapacity:TerminateInstanceInAutoScalingGroup' :: TerminateInstanceInAutoScalingGroup -> Bool
$sel:instanceId:TerminateInstanceInAutoScalingGroup' :: TerminateInstanceInAutoScalingGroup -> Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"Action"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: ( ByteString
"TerminateInstanceInAutoScalingGroup" ::
                      Prelude.ByteString
                  ),
        ByteString
"Version"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: (ByteString
"2011-01-01" :: Prelude.ByteString),
        ByteString
"InstanceId" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Text
instanceId,
        ByteString
"ShouldDecrementDesiredCapacity"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Bool
shouldDecrementDesiredCapacity
      ]

-- | /See:/ 'newTerminateInstanceInAutoScalingGroupResponse' smart constructor.
data TerminateInstanceInAutoScalingGroupResponse = TerminateInstanceInAutoScalingGroupResponse'
  { -- | A scaling activity.
    TerminateInstanceInAutoScalingGroupResponse -> Maybe Activity
activity :: Prelude.Maybe Activity,
    -- | The response's http status code.
    TerminateInstanceInAutoScalingGroupResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (TerminateInstanceInAutoScalingGroupResponse
-> TerminateInstanceInAutoScalingGroupResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: TerminateInstanceInAutoScalingGroupResponse
-> TerminateInstanceInAutoScalingGroupResponse -> Bool
$c/= :: TerminateInstanceInAutoScalingGroupResponse
-> TerminateInstanceInAutoScalingGroupResponse -> Bool
== :: TerminateInstanceInAutoScalingGroupResponse
-> TerminateInstanceInAutoScalingGroupResponse -> Bool
$c== :: TerminateInstanceInAutoScalingGroupResponse
-> TerminateInstanceInAutoScalingGroupResponse -> Bool
Prelude.Eq, ReadPrec [TerminateInstanceInAutoScalingGroupResponse]
ReadPrec TerminateInstanceInAutoScalingGroupResponse
Int -> ReadS TerminateInstanceInAutoScalingGroupResponse
ReadS [TerminateInstanceInAutoScalingGroupResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [TerminateInstanceInAutoScalingGroupResponse]
$creadListPrec :: ReadPrec [TerminateInstanceInAutoScalingGroupResponse]
readPrec :: ReadPrec TerminateInstanceInAutoScalingGroupResponse
$creadPrec :: ReadPrec TerminateInstanceInAutoScalingGroupResponse
readList :: ReadS [TerminateInstanceInAutoScalingGroupResponse]
$creadList :: ReadS [TerminateInstanceInAutoScalingGroupResponse]
readsPrec :: Int -> ReadS TerminateInstanceInAutoScalingGroupResponse
$creadsPrec :: Int -> ReadS TerminateInstanceInAutoScalingGroupResponse
Prelude.Read, Int -> TerminateInstanceInAutoScalingGroupResponse -> ShowS
[TerminateInstanceInAutoScalingGroupResponse] -> ShowS
TerminateInstanceInAutoScalingGroupResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [TerminateInstanceInAutoScalingGroupResponse] -> ShowS
$cshowList :: [TerminateInstanceInAutoScalingGroupResponse] -> ShowS
show :: TerminateInstanceInAutoScalingGroupResponse -> String
$cshow :: TerminateInstanceInAutoScalingGroupResponse -> String
showsPrec :: Int -> TerminateInstanceInAutoScalingGroupResponse -> ShowS
$cshowsPrec :: Int -> TerminateInstanceInAutoScalingGroupResponse -> ShowS
Prelude.Show, forall x.
Rep TerminateInstanceInAutoScalingGroupResponse x
-> TerminateInstanceInAutoScalingGroupResponse
forall x.
TerminateInstanceInAutoScalingGroupResponse
-> Rep TerminateInstanceInAutoScalingGroupResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep TerminateInstanceInAutoScalingGroupResponse x
-> TerminateInstanceInAutoScalingGroupResponse
$cfrom :: forall x.
TerminateInstanceInAutoScalingGroupResponse
-> Rep TerminateInstanceInAutoScalingGroupResponse x
Prelude.Generic)

-- |
-- Create a value of 'TerminateInstanceInAutoScalingGroupResponse' with all optional fields omitted.
--
-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
--
-- The following record fields are available, with the corresponding lenses provided
-- for backwards compatibility:
--
-- 'activity', 'terminateInstanceInAutoScalingGroupResponse_activity' - A scaling activity.
--
-- 'httpStatus', 'terminateInstanceInAutoScalingGroupResponse_httpStatus' - The response's http status code.
newTerminateInstanceInAutoScalingGroupResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  TerminateInstanceInAutoScalingGroupResponse
newTerminateInstanceInAutoScalingGroupResponse :: Int -> TerminateInstanceInAutoScalingGroupResponse
newTerminateInstanceInAutoScalingGroupResponse
  Int
pHttpStatus_ =
    TerminateInstanceInAutoScalingGroupResponse'
      { $sel:activity:TerminateInstanceInAutoScalingGroupResponse' :: Maybe Activity
activity =
          forall a. Maybe a
Prelude.Nothing,
        $sel:httpStatus:TerminateInstanceInAutoScalingGroupResponse' :: Int
httpStatus = Int
pHttpStatus_
      }

-- | A scaling activity.
terminateInstanceInAutoScalingGroupResponse_activity :: Lens.Lens' TerminateInstanceInAutoScalingGroupResponse (Prelude.Maybe Activity)
terminateInstanceInAutoScalingGroupResponse_activity :: Lens' TerminateInstanceInAutoScalingGroupResponse (Maybe Activity)
terminateInstanceInAutoScalingGroupResponse_activity = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\TerminateInstanceInAutoScalingGroupResponse' {Maybe Activity
activity :: Maybe Activity
$sel:activity:TerminateInstanceInAutoScalingGroupResponse' :: TerminateInstanceInAutoScalingGroupResponse -> Maybe Activity
activity} -> Maybe Activity
activity) (\s :: TerminateInstanceInAutoScalingGroupResponse
s@TerminateInstanceInAutoScalingGroupResponse' {} Maybe Activity
a -> TerminateInstanceInAutoScalingGroupResponse
s {$sel:activity:TerminateInstanceInAutoScalingGroupResponse' :: Maybe Activity
activity = Maybe Activity
a} :: TerminateInstanceInAutoScalingGroupResponse)

-- | The response's http status code.
terminateInstanceInAutoScalingGroupResponse_httpStatus :: Lens.Lens' TerminateInstanceInAutoScalingGroupResponse Prelude.Int
terminateInstanceInAutoScalingGroupResponse_httpStatus :: Lens' TerminateInstanceInAutoScalingGroupResponse Int
terminateInstanceInAutoScalingGroupResponse_httpStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\TerminateInstanceInAutoScalingGroupResponse' {Int
httpStatus :: Int
$sel:httpStatus:TerminateInstanceInAutoScalingGroupResponse' :: TerminateInstanceInAutoScalingGroupResponse -> Int
httpStatus} -> Int
httpStatus) (\s :: TerminateInstanceInAutoScalingGroupResponse
s@TerminateInstanceInAutoScalingGroupResponse' {} Int
a -> TerminateInstanceInAutoScalingGroupResponse
s {$sel:httpStatus:TerminateInstanceInAutoScalingGroupResponse' :: Int
httpStatus = Int
a} :: TerminateInstanceInAutoScalingGroupResponse)

instance
  Prelude.NFData
    TerminateInstanceInAutoScalingGroupResponse
  where
  rnf :: TerminateInstanceInAutoScalingGroupResponse -> ()
rnf TerminateInstanceInAutoScalingGroupResponse' {Int
Maybe Activity
httpStatus :: Int
activity :: Maybe Activity
$sel:httpStatus:TerminateInstanceInAutoScalingGroupResponse' :: TerminateInstanceInAutoScalingGroupResponse -> Int
$sel:activity:TerminateInstanceInAutoScalingGroupResponse' :: TerminateInstanceInAutoScalingGroupResponse -> Maybe Activity
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Activity
activity
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus