    {-# LANGUAGE Trustworthy #-}

    -----------------------------------------------------------------------------
    -- |
    -- Module      :  GHC.Internal.GHCi.Helpers
    -- Copyright   :  (c) The GHC Developers
    -- License     :  see libraries/base/LICENSE
    --
    -- Maintainer  :  ghc-devs@haskell.org
    -- Stability   :  internal
    -- Portability :  non-portable (GHC Extensions)
    --
    -- Various helpers used by the GHCi shell.
    --
    -- /The API of this module is unstable and not meant to be consumed by the general public./
    -- If you absolutely must depend on it, make sure to use a tight upper
    -- bound, e.g., @base < 4.X@ rather than @base < 5@, because the interface can
    -- change rapidly without much warning.
    --
    -----------------------------------------------------------------------------

    module GHC.Internal.GHCi.Helpers
      ( disableBuffering, flushAll
      , evalWrapper
      ) where

    import GHC.Internal.Base
    import GHC.Internal.System.IO
    import GHC.Internal.System.Environment

    disableBuffering :: IO ()
    disableBuffering :: IO ()
    disableBuffering = do
      Handle -> BufferMode -> IO ()
    hSetBuffering Handle
    stdin BufferMode
    NoBuffering
      Handle -> BufferMode -> IO ()
    hSetBuffering Handle
    stdout BufferMode
    NoBuffering
      Handle -> BufferMode -> IO ()
    hSetBuffering Handle
    stderr BufferMode
    NoBuffering

    flushAll :: IO ()
    flushAll :: IO ()
    flushAll = do
      Handle -> IO ()
    hFlush Handle
    stdout
      Handle -> IO ()
    hFlush Handle
    stderr

    evalWrapper :: String -> [String] -> IO a -> IO a
    evalWrapper :: forall a. String -> [String] -> IO a -> IO a
    evalWrapper String
    progName [String]
    args IO a
    m =
      String -> IO a -> IO a
    forall a. String -> IO a -> IO a
    withProgName String
    progName ([String] -> IO a -> IO a
    forall a. [String] -> IO a -> IO a
    withArgs [String]
    args IO a
    m)