複数のファイルを定数メモリで1つのByteStringとして読み込むにはどうすればよいですか? Haskellでn個のファイルを遅延IO操作として遅延読み込めますか?
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
は、私がここに欠陥が私が私が私が必要だと思うことは、それらを適用せずにfoldl1 joinIOStrings
を交換する方法であるので、それらをリラップその後、IOアクションを適用していますということであることを理解しています。
ありがとうございました。私はすでにData.ByteString.Lazyを使用していたことを述べておきます。これは、開いたハンドルごとに少しずつ増加するメモリ使用量でうまく機能しました。また、追加のパッケージを指摘してくれてありがとう、私はちょうどハスケルを学び始めて、まだそれらを渡って来ていない。 –