Один из возможных методов:
getLines n = sequence $ replicate n getLine
getLine
- это действие ввода-вывода, которое считывает строку из стандартного ввода и возвращает ее в виде строки.Его тип IO String
.
replicate n
создает список из n
идентичных предметов.Итак, replicate n getLine
представляет собой список n
действий ввода-вывода, каждое из которых возвращает строку: [IO String]
.
sequence
- это функция, которая принимает список действий, которые возвращают что-то, и превращает его водиночное действие, которое возвращает список этого чего-то.Так что если у нас есть [IO String]
, то sequence
превратит его в IO [String]
.
Именно этого мы и хотим.