列表理解中的 GetLine

GetLine within list comprehension

我想在列表理解中构建一个矩阵。对于每一行,我都需要 getLine 并将其解析出来。

总之,我想做这样的事情。

fun = [ getLine | y <- [0..4]]

如果我 运行 这个函数,而不是尝试从命令提示符获取每一行的 getLine,我得到一个错误,因为使用 [=19 (Show (IO String)) No Instance for (Show (IO String)) =].

我收到错误消息,但如何在列表推导中获取线条?

如果您想列出一系列操作,按顺序评估每个操作,然后 return 每个结果 – [IO a] -> IO [a] – 有 sequence:

fun = sequence [getLine | y <- [0..4]]

这可以简化为 Control.Monad.replicateM:

fun = replicateM 5 getLine