{-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE OverloadedStrings #-} module UI.CLI ( prompt , promptYN , PromptYN(PromptYes) ) where import ClassyPrelude prompt :: Text -> IO Text prompt s = do putStr $ s <> ": " hFlush stdout -- prevents buffering getLine data PromptYN = PromptYes | PromptNo promptYN :: PromptYN -> Text -> IO Bool promptYN PromptYes s = not . flip elem ["n", "no"] . toLower <$> prompt (s <> " (Y/n)") promptYN PromptNo s = not . flip elem ["y", "yes"] . toLower <$> prompt (s <> " (y/N)")