module Scientific.Workflow ( runWorkflow , getWorkflowState , module Scientific.Workflow.Builder , module Scientific.Workflow.Types ) where import Control.Monad.State import Control.Monad.Trans.Except import Control.Exception (displayException) import Scientific.Workflow.Builder import Scientific.Workflow.Types import System.IO runWorkflow :: [Workflow] -> State RunOpt () -> IO () runWorkflow wfs setOpt = do config <- getWorkflowState $ _dbPath opt foldM_ f config wfs where opt = execState setOpt defaultRunOpt f config (Workflow wf) = do result <- runExceptT $ runStateT (wf ()) config case result of Right (_, config') -> return config' Left ex -> do hPutStrLn stderr $ displayException ex return config