    {-# LANGUAGE TypeFamilies #-}

    -- | Configuration options for Lift the lambda lifter.
    module GHC.Stg.Lift.Config (
        StgLiftConfig (..),
      ) where

    import GHC.Prelude

    import GHC.Platform.Profile

    data StgLiftConfig = StgLiftConfig
      { StgLiftConfig -> Profile
    c_targetProfile         :: !Profile
      , StgLiftConfig -> Maybe Int
    c_liftLamsRecArgs       :: !(Maybe Int)
      -- ^ Maximum number of arguments after lambda lifting a recursive function.
      , StgLiftConfig -> Maybe Int
    c_liftLamsNonRecArgs    :: !(Maybe Int)
      -- ^ Maximum number of arguments after lambda lifting non-recursive function.
      , StgLiftConfig -> Bool
    c_liftLamsKnown         :: !Bool
      -- ^ Lambda lift even when this turns a known call into an unknown call.
      }
      deriving (Int -> StgLiftConfig -> ShowS
    [StgLiftConfig] -> ShowS
    StgLiftConfig -> String
    (Int -> StgLiftConfig -> ShowS)
    -> (StgLiftConfig -> String)
    -> ([StgLiftConfig] -> ShowS)
    -> Show StgLiftConfig
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> StgLiftConfig -> ShowS
    showsPrec :: Int -> StgLiftConfig -> ShowS
    $cshow :: StgLiftConfig -> String
    show :: StgLiftConfig -> String
    $cshowList :: [StgLiftConfig] -> ShowS
    showList :: [StgLiftConfig] -> ShowS
    Show, ReadPrec [StgLiftConfig]
    ReadPrec StgLiftConfig
    Int -> ReadS StgLiftConfig
    ReadS [StgLiftConfig]
    (Int -> ReadS StgLiftConfig)
    -> ReadS [StgLiftConfig]
    -> ReadPrec StgLiftConfig
    -> ReadPrec [StgLiftConfig]
    -> Read StgLiftConfig
    forall a.
    (Int -> ReadS a)
    -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
    $creadsPrec :: Int -> ReadS StgLiftConfig
    readsPrec :: Int -> ReadS StgLiftConfig
    $creadList :: ReadS [StgLiftConfig]
    readList :: ReadS [StgLiftConfig]
    $creadPrec :: ReadPrec StgLiftConfig
    readPrec :: ReadPrec StgLiftConfig
    $creadListPrec :: ReadPrec [StgLiftConfig]
    readListPrec :: ReadPrec [StgLiftConfig]
    Read, StgLiftConfig -> StgLiftConfig -> Bool
    (StgLiftConfig -> StgLiftConfig -> Bool)
    -> (StgLiftConfig -> StgLiftConfig -> Bool) -> Eq StgLiftConfig
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: StgLiftConfig -> StgLiftConfig -> Bool
    == :: StgLiftConfig -> StgLiftConfig -> Bool
    $c/= :: StgLiftConfig -> StgLiftConfig -> Bool
    /= :: StgLiftConfig -> StgLiftConfig -> Bool
    Eq, Eq StgLiftConfig
    Eq StgLiftConfig =>
    (StgLiftConfig -> StgLiftConfig -> Ordering)
    -> (StgLiftConfig -> StgLiftConfig -> Bool)
    -> (StgLiftConfig -> StgLiftConfig -> Bool)
    -> (StgLiftConfig -> StgLiftConfig -> Bool)
    -> (StgLiftConfig -> StgLiftConfig -> Bool)
    -> (StgLiftConfig -> StgLiftConfig -> StgLiftConfig)
    -> (StgLiftConfig -> StgLiftConfig -> StgLiftConfig)
    -> Ord StgLiftConfig
    StgLiftConfig -> StgLiftConfig -> Bool
    StgLiftConfig -> StgLiftConfig -> Ordering
    StgLiftConfig -> StgLiftConfig -> StgLiftConfig
    forall a.
    Eq a =>
    (a -> a -> Ordering)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> Bool)
    -> (a -> a -> a)
    -> (a -> a -> a)
    -> Ord a
    $ccompare :: StgLiftConfig -> StgLiftConfig -> Ordering
    compare :: StgLiftConfig -> StgLiftConfig -> Ordering
    $c< :: StgLiftConfig -> StgLiftConfig -> Bool
    < :: StgLiftConfig -> StgLiftConfig -> Bool
    $c<= :: StgLiftConfig -> StgLiftConfig -> Bool
    <= :: StgLiftConfig -> StgLiftConfig -> Bool
    $c> :: StgLiftConfig -> StgLiftConfig -> Bool
    > :: StgLiftConfig -> StgLiftConfig -> Bool
    $c>= :: StgLiftConfig -> StgLiftConfig -> Bool
    >= :: StgLiftConfig -> StgLiftConfig -> Bool
    $cmax :: StgLiftConfig -> StgLiftConfig -> StgLiftConfig
    max :: StgLiftConfig -> StgLiftConfig -> StgLiftConfig
    $cmin :: StgLiftConfig -> StgLiftConfig -> StgLiftConfig
    min :: StgLiftConfig -> StgLiftConfig -> StgLiftConfig
    Ord)