我的目标是编写一个 Haskell 函数,从输入中读取 N 行,并将它们连接成一个字符串。以下是第一次尝试:
readNLines :: Int -> IO String
readNLines n = do
let rows = replicate n getLine
let rowsAsString = foldl ++ [] rows
return rowsAsString
以下是有关foldl
的Haskell投诉:
无法匹配预期类型
[a]
和推断类型(a1 -> b -> a1) -> a1 -> [b] -> a1'
据我所知,行的类型是[IO String]
,是否可能以某种方式将这样的列表连接为单个IO String
?
foldl(++)[]
与concat
是相同的。 - HaskellElephant