module CommandLine.Helpers where
import Control.Monad.Error
import System.Directory
import System.IO
import qualified Elm.Utils as Utils
yesOrNo :: IO Bool
yesOrNo =
do hFlush stdout
input <- getLine
case input of
"y" -> return True
"n" -> return False
_ -> do putStr "Must type 'y' for yes or 'n' for no: "
yesOrNo
inDir :: (MonadError String m, MonadIO m) => FilePath -> m a -> m a
inDir dir doStuff =
do here <- liftIO $ getCurrentDirectory
liftIO $ createDirectoryIfMissing True dir
liftIO $ setCurrentDirectory dir
result <- doStuff
liftIO $ setCurrentDirectory here
return result
git :: (MonadError String m, MonadIO m) => [String] -> m String
git = run "git"
run :: (MonadError String m, MonadIO m) => String -> [String] -> m String
run = Utils.run
out :: (MonadIO m) => String -> m ()
out string =
liftIO $ hPutStrLn stdout string'
where
string' =
if not (null string) && last string == '\n' then init string else string