module Main where import Data.Version import System.Console.Shell import System.Console.Shell.ShellMonad import System.Console.Shell.Backend.Readline (readlineBackend) import Language.Lambda import Paths_lambda_calculator main :: IO () main = runShell mkShellDesc readlineBackend () mkShellDesc :: ShellDescription () mkShellDesc = shellDesc' $ mkShellDescription commands eval where shellDesc' d = d { greetingText = Just shellGreeting, prompt = shellPrompt } shellGreeting :: String shellGreeting = "Lambda Calculator (" ++ version' ++ ")\nType :h for help\n" shellPrompt :: s -> IO String shellPrompt _ = return "λ > " commands :: [ShellCommand s] commands = [exitCommand "q", helpCommand "h"] eval :: String -> Sh s () eval = either shellPutErrLn' shellPutStrLn' . evalString where shellPutErrLn' :: Show s => s -> Sh s' () shellPutErrLn' = shellPutErrLn . show shellPutStrLn' :: PrettyPrint s => s -> Sh s' () shellPutStrLn' = shellPutStrLn . prettyPrint version' :: String version' = showVersion version