packages feed

WeberLogic-0.1.2: WeberLogic.lhs

> import System.Environment
> import System.IO (hFlush, stdout)
> import Text.Parsec (parse)

> import WeberLogic.Parser
> import WeberLogic.Actions

> data Command = TruthTable LogicExp
>             | TruthTree [LogicExp]
>             | IsArgConsistent [LogicExp]
>             | ToNand LogicExp
>             | ToNor LogicExp
>             | Error String

> main :: IO()
> main = do
>   args <- getArgs
>   reader

> reader :: IO ()
> reader = do
>   putStrLn "Enter Command"
>   putStr "> "
>   hFlush stdout
>   line <- getLine                              
>   runCommand $ readCommand line
>   reader

> readCommand :: String -> Command
> readCommand input = case words input of 
>   ("truthTable:":arguments) -> 
>       case readExp $ unwords arguments of 
>               Right val -> TruthTable val
>               Left val -> Error val
>   ("truthTree:":arguments) ->
>       case readArg $ unwords arguments of 
>               Right val -> TruthTree val
>               Left val -> Error val
>   ("toNand:":arguments) ->
>       case readExp $ unwords arguments of 
>               Right val -> ToNand val
>               Left val -> Error val
>   ("toNor:":arguments) ->
>       case readExp $ unwords arguments of 
>               Right val -> ToNor val
>               Left val -> Error val
>   ("isArgConsistent:":arguments) ->
>       case readArg $ unwords arguments of 
>               Right val -> IsArgConsistent val
>               Left val -> Error val
>   _ -> Error input

> runCommand :: Command -> IO()
> runCommand cmd = 
>   case cmd of
>     TruthTable exp -> mapM_ putStrLn $ truthTableStrs exp
>     TruthTree exps -> truthTree exps'
>       where exps' = (take (length exps - 1) exps) ++ [Not (last exps)]
>     IsArgConsistent exps -> putStrLn $ show $ not $ isConsistent exps'
>       where exps' = (take (length exps - 1) exps) ++ [Not (last exps)]
>     ToNand exp     -> putStrLn $ show $ toNand exp
>     ToNor exp      -> putStrLn $ show $ toNor exp
>     Error err      -> putStrLn err