How can I read multiple files as one ByteString lazily with read-only memory?
, Data.ByteString.Lazy. ByteString O(sum of filesizes) .
, (D.B.L.readFile ) ,
import qualified Data.ByteString.Lazy as L
readFiles :: [FilePath] -> IO L.ByteString
readFiles = fmap L.concat . mapM L.readFile
mapM L.readFile , , .
, , , , - . mapM,
import System.IO.Unsafe (unsafeInterleaveIO)
mapM_lazy :: [IO a] -> IO [a]
mapM_lazy [] = return []
mapM_lazy (x:xs) = do
r <- x
rs <- unsafeInterleaveIO (mapM_lazy xs)
return (r:rs)
, , . , , .
iteratee, enumerator, conduit , . , , .