module Scientific.Workflow ( module Scientific.Workflow.Types , module Scientific.Workflow.Builder , module Scientific.Workflow.Builder.TH , module Scientific.Workflow.Serialization.Yaml , runWorkflow , mapA ) where import Control.Arrow (Kleisli(..)) import Control.Monad.Reader (runReaderT, forM_) import qualified Data.Text as T import Shelly (mkdir_p, shelly, fromText) import Scientific.Workflow.Builder import Scientific.Workflow.Builder.TH import Scientific.Workflow.Types import Scientific.Workflow.Serialization.Yaml runWorkflow :: [Workflow] -> WorkflowOpt -> IO () runWorkflow wfs opt = do shelly $ mkdir_p $ fromText $ T.pack $ _logDir opt forM_ wfs $ \(Workflow wf) -> do _ <- runReaderT (runProcessor wf ()) $ Config $ _logDir opt return () mapA :: Monad m => Kleisli m a b -> Kleisli m [a] [b] mapA (Kleisli f) = Kleisli $ mapM f