如何使用恒定内存懒惰地将多个文件作为单个 ByteString 读取?
readFiles :: [FilePath] -> IO ByteString
我目前有以下实现,但根据我从分析中看到的以及我的理解,我将以n-1
内存中的文件结束。
readFiles = foldl1 joinIOStrings . map ByteString.readFile
where joinIOStrings ml mr = do
l <- ml
r <- mr
return $ l `ByteString.append` r
我知道这里的缺陷是我正在应用 IO 操作然后重新包装它们,所以我认为我需要的是一种在foldl1 joinIOStrings
不应用它们的情况下替换它们的方法。