Làm cách nào để đọc nhiều tệp dưới dạng ByteString đơn lẻ với bộ nhớ không đổi? Tôi có thể đọc n tệp một cách lười biếng như một thao tác IO đơn trong Haskell không?
readFiles :: [FilePath] -> IO ByteString
Tôi hiện đang có việc thực hiện sau nhưng từ những gì tôi đã thấy từ hồ sơ cũng như sự hiểu biết của tôi, tôi sẽ kết thúc với n-1
của các tập tin trong bộ nhớ.
readFiles = foldl1 joinIOStrings . map ByteString.readFile
where joinIOStrings ml mr = do
l <- ml
r <- mr
return $ l `ByteString.append` r
Tôi hiểu rằng các lỗ hổng ở đây là tôi đang áp dụng các hành động IO sau đó xuống dòng tự động họ vì vậy những gì tôi nghĩ tôi cần là một cách để thay thế foldl1 joinIOStrings
mà không cần áp dụng chúng.
Cảm ơn, tôi nên đề cập rằng tôi đã sử dụng Data.ByteString.Lazy. Điều này làm việc tốt với việc sử dụng bộ nhớ chỉ tăng một chút với mỗi tay cầm mở. Ngoài ra cảm ơn bạn đã chỉ ra các gói bổ sung, tôi mới bắt đầu học Haskell và chưa bắt gặp chúng. –