| 1 | |
|---|
| 2 | module Main (main) where |
|---|
| 3 | |
|---|
| 4 | import Control.Monad |
|---|
| 5 | import Control.Monad.Trans |
|---|
| 6 | import System.Console.Haskeline as Haskeline |
|---|
| 7 | import System.IO |
|---|
| 8 | |
|---|
| 9 | main :: IO () |
|---|
| 10 | main = do |
|---|
| 11 | hSetBuffering stdout NoBuffering |
|---|
| 12 | hFlush stdout |
|---|
| 13 | hSetBuffering stdout NoBuffering |
|---|
| 14 | hSetBuffering stdin NoBuffering |
|---|
| 15 | runInputT defaultSettings runCommands |
|---|
| 16 | putStrLn "Leaving." |
|---|
| 17 | |
|---|
| 18 | nextInputLine :: InputT IO (Maybe String) |
|---|
| 19 | nextInputLine = getInputLine "Prompt: " |
|---|
| 20 | |
|---|
| 21 | runCommands :: InputT IO () |
|---|
| 22 | runCommands = do |
|---|
| 23 | b <- runOneCommand |
|---|
| 24 | unless b $ runCommands |
|---|
| 25 | |
|---|
| 26 | runOneCommand :: InputT IO Bool |
|---|
| 27 | runOneCommand = do |
|---|
| 28 | mb_cmd <- nextInputLine |
|---|
| 29 | case mb_cmd of |
|---|
| 30 | Nothing -> return True |
|---|
| 31 | Just c -> do liftIO $ print ('C', c) |
|---|
| 32 | return False |
|---|