diff --git a/.gitignore b/.gitignore index ede7fdb..4d5b077 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ .stack-work -tests/runnable/* \ No newline at end of file +tests/runnable/* +.idea \ No newline at end of file diff --git a/exec/Main.hs b/exec/Main.hs index 808bdd6..cc80912 100644 --- a/exec/Main.hs +++ b/exec/Main.hs @@ -7,6 +7,10 @@ import qualified Language.Wasm.Lexer as Lexer import qualified Language.Wasm.Parser as Parser import qualified Language.Wasm.Binary as Binary +import Options.Applicative +import Data.Semigroup ((<>)) +import Wasm.WasmParser + data OutputMode = WasmBinary | JSWrapper deriving (Show, Eq) data WasmConfig = WasmConfig { @@ -24,6 +28,15 @@ compile input output = do Left reason -> putStrLn $ "Cannot complie module: " ++ reason + main :: IO () -main = do - putStrLn "There is no WASM!" +main = parseArgs =<< execParser opts + where + opts = info (sample <**> helper) + ( fullDesc + <> progDesc "Print a greeting for TARGET" + <> header "hello - a test for optparse-applicative" ) + +parseArgs :: WasmParser -> IO () +parseArgs (WasmParser h False n) = putStrLn $ "Hello, " ++ h ++ replicate n '!' +parseArgs _ = return () \ No newline at end of file diff --git a/exec/Wasm/WasmParser.hs b/exec/Wasm/WasmParser.hs new file mode 100644 index 0000000..311c596 --- /dev/null +++ b/exec/Wasm/WasmParser.hs @@ -0,0 +1,26 @@ +module Wasm.WasmParser where + +import Options.Applicative +import Data.Semigroup ((<>)) + +data WasmParser = WasmParser + { hello :: String + , quiet :: Bool + , enthusiasm :: Int } + +sample :: Parser WasmParser +sample = WasmParser + <$> strOption + ( long "hello" + <> metavar "TARGET" + <> help "Target for the greeting" ) + <*> switch + ( long "quiet" + <> short 'q' + <> help "Whether to be quiet" ) + <*> option auto + ( long "enthusiasm" + <> help "How enthusiastically to greet" + <> showDefault + <> value 1 + <> metavar "INT" ) \ No newline at end of file diff --git a/wasm.cabal b/wasm.cabal index 43ef94d..7e8037f 100644 --- a/wasm.cabal +++ b/wasm.cabal @@ -33,6 +33,7 @@ library , vector >= 0.12 , ieee754 >= 0.8 , deepseq >= 1.4 + , optparse-applicative >= 0.14 build-tools: alex >=3.1.3 , happy >=1.9.4 @@ -58,6 +59,9 @@ executable wasm , wasm ==0.1.0 , optparse-applicative >= 0.13 , bytestring >=0.10 && <0.11 + other-modules: + Wasm.WasmParser + test-suite test type: exitcode-stdio-1.0