simple repl
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -1 +1 @@
|
|||||||
bin/
|
dist/
|
||||||
|
5
bc.cabal
5
bc.cabal
@@ -6,7 +6,6 @@ license: MIT
|
|||||||
license-file: LICENSE
|
license-file: LICENSE
|
||||||
author: Veit Heller
|
author: Veit Heller
|
||||||
maintainer: veit@veitheller.de
|
maintainer: veit@veitheller.de
|
||||||
copyright:
|
|
||||||
category: Language
|
category: Language
|
||||||
build-type: Simple
|
build-type: Simple
|
||||||
extra-source-files: ChangeLog.md, README.md
|
extra-source-files: ChangeLog.md, README.md
|
||||||
@@ -14,7 +13,7 @@ cabal-version: >=1.10
|
|||||||
|
|
||||||
executable bc
|
executable bc
|
||||||
main-is: Main.hs
|
main-is: Main.hs
|
||||||
other-modules:
|
hs-source-dirs: src/
|
||||||
build-depends: base >=4.9 && <4.10
|
build-depends: base >=4.9 && <4.10, haskeline, unix
|
||||||
hs-source-dirs: src
|
hs-source-dirs: src
|
||||||
default-language: Haskell2010
|
default-language: Haskell2010
|
||||||
|
@@ -1,5 +1,7 @@
|
|||||||
module Bc.Prompt where
|
module BC.Config where
|
||||||
|
|
||||||
versionStr = "0.1.0.0"
|
versionStr = "0.1.0.0"
|
||||||
|
|
||||||
prompt = "> "
|
promptStr = "> "
|
||||||
|
|
||||||
|
returnStr = "=> "
|
||||||
|
@@ -1,24 +1,45 @@
|
|||||||
module BC.Prompt (startPrompt) where
|
module BC.Prompt (startPrompt) where
|
||||||
|
|
||||||
|
import System.Console.Haskeline
|
||||||
|
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 out = outputStrLn $ returnStr ++ out
|
||||||
|
|
||||||
|
|
||||||
prompt :: IO ()
|
prompt :: IO ()
|
||||||
prompt = runInputT settings $ poll prompt
|
prompt = runInputT defaultSettings $ poll promptStr
|
||||||
where poll p = do
|
where poll p = do
|
||||||
input <- getInputLine p
|
input <- getInputLine p
|
||||||
case input of
|
case input of
|
||||||
Nothing -> return ""
|
Nothing -> do
|
||||||
Just str -> return str
|
output "Bye!"
|
||||||
|
return ()
|
||||||
|
Just "quit" -> do
|
||||||
|
output "Bye!"
|
||||||
|
return ()
|
||||||
|
Just str -> do
|
||||||
|
output str
|
||||||
|
poll p
|
||||||
|
|
||||||
|
|
||||||
|
installHandlers :: IO ()
|
||||||
|
installHandlers = do
|
||||||
|
installHandler keyboardSignal (Catch (putStrLn "\n(interrupt) type quit to exit")) Nothing
|
||||||
|
return ()
|
||||||
|
|
||||||
|
|
||||||
startPrompt :: IO ()
|
startPrompt :: IO ()
|
||||||
startPrompt = do
|
startPrompt = do
|
||||||
printHeader
|
printHeader
|
||||||
|
installHandlers
|
||||||
prompt
|
prompt
|
||||||
|
Reference in New Issue
Block a user