blob: 6d21d4854ecc9a9052af15acd65bcf80b1bfefc9 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
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."
|