{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE MultiParamTypeClasses #-} module Utils where import Control.Monad.IO.Class (MonadIO) import Control.Monad.Reader (MonadReader) import System.IO (hPutStrLn, stderr) import System.Exit (exitFailure) import Types {- verbose :: (MonadReader SparkConfig m, MonadIO m) => String -> m () verbose str = do v <- asks conf_verbose if v then liftIO $ putStrLn str else return () verboseOrDry :: (MonadReader SparkConfig m, MonadIO m) => String -> m () verboseOrDry str = do v <- asks conf_verbose d <- asks conf_dry if v || d then liftIO $ putStrLn str else return () -} debug :: (MonadReader SparkConfig m, MonadIO m) => String -> m () debug str = do v <- asks conf_debug if v then liftIO $ putStrLn str else return () incase :: MonadReader SparkConfig m => (SparkConfig -> Bool) -> m () -> m () incase bf func = do b <- asks bf if b then func else return () incaseElse :: MonadReader SparkConfig m => (SparkConfig -> Bool) -> m a -> m a -> m a incaseElse bf funcif funcelse = do b <- asks bf if b then funcif else funcelse notImplementedYet :: Sparker () notImplementedYet = throwError $ UnpredictedError "This feature is not implemented yet, it will be in the future, so be sure to check back in a newer version." die :: String -> IO a die err = hPutStrLn stderr err >> exitFailure