-- | Compile-time settings
module GHC.Settings.Constants where

import GHC.Prelude

import GHC.Settings.Config

hiVersion :: Integer
hiVersion :: Integer
hiVersion = String -> Integer
forall a. Read a => String -> a
read (String
cProjectVersionInt String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
cProjectPatchLevel) :: Integer

-- All pretty arbitrary:

mAX_TUPLE_SIZE :: Int
mAX_TUPLE_SIZE :: Int
mAX_TUPLE_SIZE = Int
64 -- Should really match the number
                    -- of decls in GHC.Tuple

mAX_CTUPLE_SIZE :: Int   -- Constraint tuples
mAX_CTUPLE_SIZE :: Int
mAX_CTUPLE_SIZE = Int
64     -- Should match the number of decls in GHC.Classes

mAX_SUM_SIZE :: Int      -- We use 6 bits to record sum size,
mAX_SUM_SIZE :: Int
mAX_SUM_SIZE = Int
63        -- so max sum size is 63.  Sadly inconsistent.

-- | Default maximum depth for both class instance search and type family
-- reduction. See also #5395.
mAX_REDUCTION_DEPTH :: Int
mAX_REDUCTION_DEPTH :: Int
mAX_REDUCTION_DEPTH = Int
200

-- | Default maximum constraint-solver iterations
-- Typically there should be very few
mAX_SOLVER_ITERATIONS :: Int
mAX_SOLVER_ITERATIONS :: Int
mAX_SOLVER_ITERATIONS = Int
4

-- | In case of loopy quantified constraints constraints,
--   how many times should we allow superclass expansions
--   Should be less than mAX_SOLVER_ITERATIONS
--   See Note [Expanding Recursive Superclasses and ExpansionFuel]
mAX_QC_FUEL :: Int
mAX_QC_FUEL :: Int
mAX_QC_FUEL = Int
3

-- | In case of loopy wanted constraints,
--   how many times should we allow superclass expansions
--   Should be less than mAX_GIVENS_FUEL
-- See Note [Expanding Recursive Superclasses and ExpansionFuel]
mAX_WANTEDS_FUEL :: Int
mAX_WANTEDS_FUEL :: Int
mAX_WANTEDS_FUEL = Int
1

-- | In case of loopy given constraints,
--   how many times should we allow superclass expansions
--   Should be less than max_SOLVER_ITERATIONS
-- See Note [Expanding Recursive Superclasses and ExpansionFuel]
mAX_GIVENS_FUEL :: Int
mAX_GIVENS_FUEL :: Int
mAX_GIVENS_FUEL = Int
3

wORD64_SIZE :: Int
wORD64_SIZE :: Int
wORD64_SIZE = Int
8

-- Size of float in bytes.
fLOAT_SIZE :: Int
fLOAT_SIZE :: Int
fLOAT_SIZE = Int
4

-- Size of double in bytes.
dOUBLE_SIZE :: Int
dOUBLE_SIZE :: Int
dOUBLE_SIZE = Int
8

tARGET_MAX_CHAR :: Int
tARGET_MAX_CHAR :: Int
tARGET_MAX_CHAR = Int
0x10ffff