packages feed

ghcup-0.1.50.2: lib/GHCup/Prompts.hs

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE FlexibleContexts #-}

module GHCup.Prompts
  ( PromptQuestion,
    PromptResponse (..),
    getUserPromptResponse,
  )
where

import Control.Monad.Reader
import qualified Data.Text as T
import qualified Data.Text.IO as TIO
import GHCup.Prelude.Logger
import GHCup.Types.Optics
import GHCup.Types (PromptQuestion, PromptResponse(..))

getUserPromptResponse :: ( HasLog env
                         , MonadReader env m
                         , MonadIO m)
                      => PromptQuestion
                      -> PromptResponse -- ^ Default reponse to use if user doesn't type explicit response (e.g. just presses Return)
                      -> m PromptResponse
getUserPromptResponse prompt defaultResponse = do
  logInfo prompt
  resp <- liftIO TIO.getLine
  pure $
    if T.null resp
      then defaultResponse
      else if resp `elem` ["YES", "yes", "y", "Y"]
        then PromptYes
        else PromptNo