PlusOuMoins/src/Utils.hs

20 lines
506 B
Haskell

{-# LANGUAGE ScopedTypeVariables #-}
module Utils (
outputLn
, prompt
) where
import Control.Monad.IO.Class (MonadIO(..))
import Text.Read (readMaybe)
outputLn :: MonadIO m => String -> m ()
outputLn = liftIO . putStrLn
prompt :: MonadIO m => m () -> m () -> (Int, Int) -> m Int
prompt message onError range@(minVal, maxVal) = do
message
mn <- readMaybe <$> liftIO getLine
case mn of
Just n | n >= minVal && n <= maxVal -> return n
_ -> onError >> prompt message onError range