我总是使用C ++和Pascal进行编程,并且过于强调。那么,任何人都可以帮我解决这个问题:
考虑我们有以下输入模式:
integer n
n strings
other data
例如:
2
foo
bar
3 4
and so on.
所以,我只需要读取一个列表中的n个字符串,而不需要读取其他数据。如果没有类似的结构,我该怎么办呢?
答案 0 :(得分:4)
一种可能的方法是
getLines n = sequence $ replicate n getLine
getLine
是一个IO操作,它从标准输入读取一行并将其作为字符串返回。它的类型是IO String
。
replicate n
创建n
个相同项目的列表。因此replicate n getLine
是n
IO操作的列表,每个操作都返回一个字符串:[IO String]
。
sequence
是一个函数,它获取返回某些内容的操作列表,并将其转换为返回该内容列表的单个操作。因此,如果我们有[IO String]
,则sequence
会将其转换为IO [String]
。
这正是我们想要的。