diff options
author | Egor Tensin <Egor.Tensin@gmail.com> | 2016-07-18 00:09:44 +0300 |
---|---|---|
committer | Egor Tensin <Egor.Tensin@gmail.com> | 2016-07-18 00:09:44 +0300 |
commit | 14d1ee026b9f2dded1eb1adc51e50f6b779b4aa4 (patch) | |
tree | 60daf05b8eafaec8ae4d4d90ac6cc59b4a1af22a /apps/Utils.hs | |
parent | refactoring (diff) | |
download | windows-env-14d1ee026b9f2dded1eb1adc51e50f6b779b4aa4.tar.gz windows-env-14d1ee026b9f2dded1eb1adc51e50f6b779b4aa4.zip |
refactoring
Diffstat (limited to '')
-rw-r--r-- | apps/Utils.hs | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/apps/Utils.hs b/apps/Utils.hs new file mode 100644 index 0000000..28309d4 --- /dev/null +++ b/apps/Utils.hs @@ -0,0 +1,66 @@ +{- + - Copyright 2015 Egor Tensin <Egor.Tensin@gmail.com> + - This file is licensed under the terms of the MIT License. + - See LICENSE.txt for details. +-} + +module Utils + ( withPrompt + , withoutPrompt + + , engraveBanner + , wipeBanner + ) where + +import Control.Monad (liftM, void, when) +import Data.Maybe (fromJust, isJust) +import Data.Char (toLower) +import System.IO (hFlush, stdout) +import Text.Printf (printf) + +import Environment (Profile, profileKeyPath, VarName, VarValue) + +prompt :: String -> IO String +prompt banner = do + putStr banner + hFlush stdout + getLine + +promptYesNo :: String -> IO Bool +promptYesNo banner = do + response <- liftM (map toLower) $ prompt banner + if response `elem` yeses + then return True + else if response `elem` noes + then return False + else promptToContinue + where + yeses = ["y", "yes"] + noes = ["n", "no"] + +promptToContinue :: IO Bool +promptToContinue = promptYesNo "Continue? (y/n) " + +withPrompt :: String -> IO a -> IO Bool +withPrompt banner m = do + putStr banner + hFlush stdout + agreed <- promptToContinue + when agreed $ void m + return agreed + +withoutPrompt :: IO a -> IO Bool +withoutPrompt m = m >> return True + +engraveBanner :: Profile -> VarName -> Maybe VarValue -> VarValue -> String +engraveBanner profile name oldValue newValue = + header ++ values + where + header = printf "Saving variable '%s' to '%s'...\n" name (profileKeyPath profile) + values = if isJust oldValue + then printf "\tOld value: %s\n\tNew value: %s\n" (fromJust oldValue) newValue + else printf "\tValue: %s\n" newValue + +wipeBanner :: Profile -> VarName -> String +wipeBanner profile name = + printf "Deleting variable '%s' from '%s'...\n" name (profileKeyPath profile) |