Я хочу создать цикл, который будет принимать пользовательский ввод, то есть getLine, во время каждой итерации цикла. Возможно ли это внутри main или с помощью функции getLine в передаче параметров или нет вообще? Я относительно новичок в Haskell, и почти все у меня в голове, но в этом я не уверен. Очевидно, что для выхода из него будет использоваться сопоставление с образцом, но как мне получить ввод пользователя? Я пытался понять это сам, но каждый раз терпел неудачу. Заранее спасибо.
Haskell - как создать цикл, в котором есть getLine?
Ответы (1)
Вы должны использовать монаду ввода-вывода для своих функций, для создания цикла вы можете просто сделать рекурсивный вызов, проверьте этот пример:
-- This just wraps the getLine funtion but you could operate over the input before return the final result
processInput :: IO String
processInput = do
line <- getLine
return $ map toUpper line
-- This is our main loop, it handles when to exit
loop :: IO ()
loop = do
line <- processInput
putStrLn line
case line of
"quit" -> return ()
otherwise -> loop
-- main is the program entry point
main :: IO ()
main = do
putStrLn "Welcome to the haskel input example"
loop
Здесь у вас есть живой пример
person
Netwave
schedule
19.04.2019
@RobinZigmond, я упомянул об этом в комментарии, я просто хотел указать, что, если ему нужно преобразовать входную строку, это можно сделать там. Просто чтобы показать OP пример с 3 основными моментами. 1 - функция, выполняющая некоторые операции, 2 - основной цикл и 3 - точка входа.
- person Netwave; 19.04.2019
Извините @NetWave, я заметил, что после публикации, поэтому удалил мой текущий. Но я все еще думаю, что это сбивает с толку новичка - вы говорите, что это обертывание
getLine
, без определения того, что вы подразумеваете под оберткой, хотя на самом деле это точно то же самое.
- person Robin Zigmond; 19.04.2019