spade-0.1.0.7: src/UI/Terminal/IO.hs
module UI.Terminal.IO
( module UI.Terminal.IO
, S.stdin
, S.stdout
, S.BufferMode (..)
) where
import Data.Text (Text)
import Data.Text.IO as T
import qualified System.IO as S
import qualified System.Console.ANSI as A
import Control.Monad.IO.Class
class Monad m => HasTerminal m where
setCursorPosition :: Int -> Int -> m ()
hideCursor :: m ()
showCursor :: m ()
putText :: Text -> m ()
putTextFlush :: Text -> m ()
hFlush :: m ()
hSetEcho :: S.Handle -> Bool -> m ()
hSetBuffering :: S.Handle -> S.BufferMode -> m ()
hGetChar :: m Char
hWaitForInput :: m Bool
clearscreen :: m ()
clearline :: m ()
instance (Monad m, MonadIO m) => HasTerminal m where
setCursorPosition x y = do
liftIO $ A.setCursorPosition y x
hFlush
hideCursor = liftIO A.hideCursor
showCursor = do
liftIO A.showCursor
hFlush
putText t = liftIO $ do
T.putStr t
putTextFlush t = do
putText t
hFlush
hFlush = liftIO $ S.hFlush S.stdout
hSetEcho h b = liftIO $ S.hSetEcho h b
hGetChar = liftIO $ S.hGetChar S.stdin
hSetBuffering h b = liftIO $ S.hSetBuffering h b
hWaitForInput = liftIO $ S.hWaitForInput S.stdin 0
clearscreen = do
liftIO A.clearScreen
hFlush
clearline = liftIO $ A.hClearFromCursorToLineEnd S.stdout