Haskell - как сделать цикл, в котором есть getLine? - PullRequest
1 голос
/ 19 апреля 2019

Я хочу создать цикл, который будет принимать пользовательский ввод, то есть getLine, во время каждой итерации цикла. Возможно ли это в основном или с помощью функции getLine в передаче параметров или нет вообще? Я относительно новичок в Хаскеле, и я разбираюсь в большей части этого, но в этом я не уверен. Очевидно, что для выхода из него будет использовано сопоставление с образцом, но как я могу получить пользовательский ввод? Я пытался понять это сам, но каждый раз терпел неудачу. Заранее спасибо.

1 Ответ

4 голосов
/ 19 апреля 2019

Вы должны использовать монаду IO для своих функций, для создания цикла вы можете просто сделать рекурсивный вызов , посмотрите этот пример:

-- 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

Здесь у вас есть живой пример

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...