module Test.Framework.Runners.Console.Utilities (
        hideCursorDuring
    ) where

import System.Console.ANSI ( hideCursor, showCursor )
import System.IO ( hFlush, stdout )

import Control.Exception (bracket)


hideCursorDuring :: IO a -> IO a
hideCursorDuring :: forall a. IO a -> IO a
hideCursorDuring IO a
action = IO () -> (() -> IO ()) -> (() -> IO a) -> IO a
forall a b c. IO a -> (a -> IO b) -> (a -> IO c) -> IO c
bracket IO ()
hideCursor (IO () -> () -> IO ()
forall a b. a -> b -> a
const (IO ()
showCursor IO () -> IO () -> IO ()
forall a b. IO a -> IO b -> IO b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Handle -> IO ()
hFlush Handle
stdout)) (IO a -> () -> IO a
forall a b. a -> b -> a
const IO a
action)