Haskell懒惰打开和关闭文件

时间:2013-07-10 12:08:05

标签: file haskell io lazy-evaluation

我想在Haskell中从硬盘中读取一个大图结构。图结构如下所示:

每个节点都有一个定义 - 一个描述子节点以及它们如何连接的文件(这些图形是使用Data.Serialize序列化的。

每个节点都可以有孩子。因此,如果我有文件A.node,我可以让目录A包含A节点的子节点(以<X>.node文件和目录的形式)。

我希望能够使用Haskell遍历此图并加载到内存并仅反序列化所需的文件。因此,如果我以A->B->C的方式遍历图表(其中BA等的子项),那么Haskell应该读取文件A.node,{{1} }和A/B.node。下次我遍历图表时,文件应 NOT 再次读取,因为我们已经这样做了。

我怎样才能以最好的方式做到这一点?

1 个答案:

答案 0 :(得分:2)

有些库为您提供表示完整目录树的纯值,并且只读取实际使用的那些目录和文件。凭借延迟评估,第二次访问此类文件时,它已经在内存中。

查看directory-tree,尤其是readDirectoryWithL功能。