import Data.Char (isDigit, isSpace) data Color = Red | Green | Blue deriving (Show, Eq) -- Parse a single digit digit :: Char -> Maybe Int digit c | isDigit c = Just (read [c]) | otherwise = Nothing -- Parse an integer -- Parse an integer parseInt :: String -> Maybe Int parseInt str = case reads str of [(num, "")] -> Just num _ -> Nothing -- Parse color parseColor :: String -> Maybe Color parseColor "red" = Just Red parseColor "green" = Just Green parseColor "blue" = Just Blue parseColor _ = Nothing -- Parse the entire input string parseInput :: String -> Maybe Bool parseInput input = do let (numStr, rest) = span (\c -> isDigit c ) input num <- parseInt numStr let colorStr = dropWhile isSpace rest color <- parseColor colorStr case color of Red -> pure (num < 12) Green -> pure (num < 13) Blue -> pure (num < 14) main :: IO () main = do putStrLn "Enter input (e.g., '10 red'):" input <- getLine case parseInput input of Just result -> putStrLn $ "Result: " ++ show result Nothing -> putStrLn "Invalid input."