removed haskeline extension

This commit is contained in:
2017-04-28 12:58:11 +02:00
parent a36bab384d
commit 71983ddf3e
2 changed files with 40 additions and 25 deletions

View File

@@ -14,6 +14,6 @@ cabal-version: >=1.10
executable bc executable bc
main-is: Main.hs main-is: Main.hs
hs-source-dirs: src/ hs-source-dirs: src/
build-depends: base >=4.9 && <4.10, haskeline, unix build-depends: base >=4.9 && <4.10, unix
hs-source-dirs: src hs-source-dirs: src
default-language: Haskell2010 default-language: Haskell2010

View File

@@ -1,45 +1,60 @@
module BC.Prompt (startPrompt) where module BC.Prompt (startPrompt) where
import System.Console.Haskeline import Data.Char
import System.IO
import System.Posix.Signals import System.Posix.Signals
import BC.Config import BC.Config
printHeader :: IO () printHeader :: IO ()
printHeader = do printHeader = do
putStrLn $ "bc (better calculator) version " ++ versionStr putStrLn $ "bc (better calculator) version " ++ versionStr
putStrLn "Copyright 2017 Veit Heller" putStrLn "Copyright 2017 Veit Heller"
putStrLn "This is free software with ABSOLUTELY NO WARRANTY.\n" putStrLn "This is free software with ABSOLUTELY NO WARRANTY.\n"
output :: [Char] -> InputT IO () output :: String -> IO ()
output out = outputStrLn $ returnStr ++ out output out = putStrLn $ returnStr ++ out
readline :: IO (Maybe String)
readline = do
putStr promptStr
hFlush stdout
read' ""
where read' acc = do
c <- getChar
case c of
'\EOT' -> return Nothing
'\n' -> return (Just acc)
c -> read' (acc ++ [c])
prompt :: IO () prompt :: IO ()
prompt = runInputT defaultSettings $ poll promptStr prompt = do
where poll p = do input <- readline
input <- getInputLine p case input of
case input of Nothing -> do
Nothing -> do output "Bye!"
output "Bye!" return ()
return () Just "quit" -> do
Just "quit" -> do output "Bye!"
output "Bye!" return ()
return () Just str -> do
Just str -> do output str
output str prompt
poll p
installHandlers :: IO () installHandlers :: IO ()
installHandlers = do installHandlers = do
installHandler keyboardSignal (Catch (putStrLn "\n(interrupt) type quit to exit")) Nothing installHandler keyboardSignal (Catch (putStrLn "\n(interrupt) type quit to exit")) Nothing
return () hSetBuffering stdout NoBuffering
hSetBuffering stdin NoBuffering
return ()
startPrompt :: IO () startPrompt :: IO ()
startPrompt = do startPrompt = do
printHeader printHeader
installHandlers installHandlers
prompt prompt