{-# 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)