module Brainheck.Exec.Opt where import Options.Applicative import Brainheck import qualified Data.Text.IO as TIO import Data.Monoid import Control.Monad.State.Lazy data Program = Program { filepath :: FilePath } program :: Parser Program program = Program <$> argument str (metavar "FILE" <> help "Brainfuck file") exec :: IO () exec = runFile =<< execParser (info (program <**> helper) (fullDesc <> progDesc "Brainh*ck interpreter" <> header "brainheck - a brainh*ck intrepreter written in haskell and supporting utf-8")) runFile :: Program -> IO () runFile program = either (error . show) id . parseBrainheck <$> TIO.readFile (filepath program) >>= run