packages feed

vty-5.39: tools/CrashFix.hs

module Main (main) where

import Control.Monad (when, void)
import Graphics.Vty
import System.IO

main :: IO ()
main = do
    flushInput stdin
    vty <- mkVty defaultConfig
    shutdown vty

flushInput :: Handle -> IO ()
flushInput h = do
    mode <- hGetBuffering h
    hSetBuffering h NoBuffering
    whileM $ consume h
    hSetBuffering h mode

whileM :: (Monad m) => m Bool -> m ()
whileM act = do
    continue <- act
    when continue $ whileM act

consume :: Handle -> IO Bool
consume h = do
    ava <- hReady h
    when ava $ void $ hGetChar h
    pure ava