futhark-0.25.13: src/Futhark/CLI/Script.hs
module Futhark.CLI.Script (main) where
import Control.Monad.Except
import Data.Text qualified as T
import Data.Text.IO qualified as T
import Futhark.CLI.Literate
( Options (..),
initialOptions,
prepareServer,
scriptCommandLineOptions,
)
import Futhark.Script
import Futhark.Util.Options
import Futhark.Util.Pretty (prettyText)
import System.Exit
import System.IO
commandLineOptions :: [FunOptDescr Options]
commandLineOptions =
scriptCommandLineOptions
++ [ Option
"D"
["debug"]
( NoArg $ Right $ \config ->
config
{ scriptExtraOptions = "-D" : scriptExtraOptions config,
scriptVerbose = scriptVerbose config + 1
}
)
"Enable debugging.",
Option
"L"
["log"]
( NoArg $ Right $ \config ->
config
{ scriptExtraOptions = "-L" : scriptExtraOptions config,
scriptVerbose = scriptVerbose config + 1
}
)
"Enable logging."
]
-- | Run @futhark script@.
main :: String -> [String] -> IO ()
main = mainWithOptions initialOptions commandLineOptions "program script" $ \args opts ->
case args of
[prog, script] -> Just $ do
script' <- case parseExpFromText "command line argument" $ T.pack script of
Left e -> do
T.hPutStrLn stderr e
exitFailure
Right x -> pure x
prepareServer prog opts $ \s -> do
r <-
runExceptT $ getExpValue s =<< evalExp (scriptBuiltin ".") s script'
case r of
Left e -> do
T.hPutStrLn stderr e
exitFailure
Right v ->
T.putStrLn $ prettyText v
_ -> Nothing