SciFlow-0.3.0: src/Scientific/Workflow/Main.hs
{-# LANGUAGE TemplateHaskell #-}
module Scientific.Workflow.Main where
import Options.Applicative
import Options.Applicative.Types
import Data.List.Split (splitOn)
import Language.Haskell.TH
import Scientific.Workflow
workflowOptions :: Parser RunOpt
workflowOptions = subparser $
command "run" ( info (helper <*> runOptParser) $ fullDesc <> progDesc "run" )
where
runOptParser = RunOpt
<$> strOption
( long "dir"
<> value "./"
<> short 'd' )
<*> strOption
( long "log"
<> value "wfCache"
<> short 'l' )
<*> option (Select . splitOn "," <$> readerAsk)
( long "nodes"
<> value All )
<*> switch
( long "force"
<> short 'f' )
defaultMain :: Builder () -> Q [Dec]
defaultMain = defineWorkflow "main"
defineWorkflow :: String -> Builder () -> Q [Dec]
defineWorkflow name builder = do
workflowDec <- mkWorkflow "workflow_main" builder
mainDec <- [d| $(varP $ mkName name) = execParser
(info (helper <*> workflowOptions) fullDesc) >>=
runWorkflow $(varE $ mkName "workflow_main")
|]
return $ workflowDec ++ mainDec