{-# LANGUAGE DeriveDataTypeable #-} module Main where import System.Console.CmdArgs import TensorSafe.Commands.Check (check) import TensorSafe.Commands.Compile (compile) import TensorSafe.Commands.Examples (examples) data Backend = JavaScript | Python deriving (Data, Eq, Show, Typeable) data TensorSafe = Check { path :: FilePath } | Compile { path :: FilePath, module_name :: String, backend :: Backend, out :: Maybe FilePath } | Examples deriving (Data, Eq, Show, Typeable) cCheck :: TensorSafe cCheck = Check { path = def &= typ "PATH" &= help "Path to Haskell module with TensorSafe model inside" } &= help "Checks if a Neural Network model is valid or not" cCompile :: TensorSafe cCompile = Compile { path = def &= typ "PATH" &= help "Path to Haskell module with TensorSafe model inside" , module_name = def &= help "The module name inside the TensorSafe model file" , backend = enum [ JavaScript &= help "Compile to JavaScript backend" , Python &= help "Compile to Python backend"] , out = def &= help "If specified, the output file path to which the network will be generated" } &= help "Compiles module and outputs Neural Network model for the specified backend" cExamples :: TensorSafe cExamples = Examples &= help "Show some examples" tensorSafe :: IO TensorSafe tensorSafe = cmdArgs (modes [cCompile, cCheck, cExamples]) main :: IO () main = do -- print =<< tensorSafe r <- tensorSafe case r of Check { path = p } -> check p Compile { path = p, module_name = m, backend = b, out = o } -> compile p m (show b) o Examples -> examples