packages feed

hatt-0.1: src/hatt.hs

{-# LANGUAGE DeriveDataTypeable #-}

module Main
    ( main
    ) where

import Data.Logic.Propositional

import System.Console.CmdArgs

data HattOpts = HattOpts
    { evaluate :: String
    } deriving (Show, Data, Typeable)

hattOpts :: HattOpts
hattOpts = HattOpts
  { evaluate = def &= opt "" &= typ "EXPRESSION"
                   &= help "Print the truth table for the given expression"
  } &= summary "Hatt 0.1, (c) Benedict Eastaugh 2011"
    &= program "hatt"

main :: IO ()
main = do opts <- cmdArgs hattOpts
          case evaluate opts of
               ""   -> putStrLn "Try using the --evaluate[=EXPRESSION] flag"
               expr -> putStr (eval expr)

eval :: String -> String
eval str = case parseExpr "" str of
                Left  err  -> "parse error at " ++ show err ++ "\n"
                Right expr -> truthTable expr