GHC/Prelude.hs

    {-# LANGUAGE CPP #-}

    -- | 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 X) where

    -- 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.

    import Prelude as X hiding ((<>))
    import Data.Foldable as X (foldl')

    {-
    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.
    -}