content: {-# LANGUAGE CPP #-}
  {-# OPTIONS_HADDOCK not-home #-}
  {-# OPTIONS_GHC -O2 #-} -- See Note [-O2 Prelude]
  
  -- | Custom GHC "Prelude"
  --
  -- This module serves as a replacement for the "Prelude" module
  -- and abstracts over differences between the bootstrapping
  -- GHC version, and may also provide a common default vocabulary.
  
  -- Every module in GHC
  --   * Is compiled with -XNoImplicitPrelude
  --   * Explicitly imports GHC.Prelude
  
  module GHC.Prelude
    (module GHC.Prelude
    ,module GHC.Utils.Trace
    ) where
  
  
  {- Note [-O2 Prelude]
  ~~~~~~~~~~~~~~~~~~~~~
  There is some code in GHC that is *always* compiled with -O[2] because
  of it's impact on compile time performance. Some of this code might depend
  on the definitions like shiftL being defined here being performant.
  
  So we always compile this module with -O2. It's (currently) tiny so I
  have little reason to suspect this impacts overall GHC compile times
  negatively.
  
  -}
  -- We export the 'Semigroup' class but w/o the (<>) operator to avoid
  -- clashing with the (Outputable.<>) operator which is heavily used
  -- through GHC's code-base.
  
  {-
  Note [Why do we import Prelude here?]
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  The files ghc-boot-th.cabal, ghc-boot.cabal, ghci.cabal and
  ghc-heap.cabal contain the directive default-extensions:
  NoImplicitPrelude. There are two motivations for this:
    - Consistency with the compiler directory, which enables
      NoImplicitPrelude;
    - Allows loading the above dependent packages with ghc-in-ghci,
      giving a smoother development experience when adding new
      extensions.
  -}
  
  import GHC.Prelude.Basic as GHC.Prelude
  
  -- import {-# SOURCE #-} GHC.Utils.Trace
  import GHC.Utils.Trace hiding ( trace )
  