我想在Haskell中从硬盘中读取一个大图结构。图结构如下所示:
每个节点都有一个定义 - 一个描述子节点以及它们如何连接的文件(这些图形是使用Data.Serialize
序列化的。
每个节点都可以有孩子。因此,如果我有文件A.node
,我可以让目录A
包含A
节点的子节点(以<X>.node
文件和目录的形式)。
我希望能够使用Haskell遍历此图并加载到内存并仅反序列化所需的文件。因此,如果我以A->B->C
的方式遍历图表(其中B
是A
等的子项),那么Haskell应该读取文件A.node
,{{1} }和A/B.node
。下次我遍历图表时,文件应 NOT 再次读取,因为我们已经这样做了。
我怎样才能以最好的方式做到这一点?
答案 0 :(得分:2)
有些库为您提供表示完整目录树的纯值,并且只读取实际使用的那些目录和文件。凭借延迟评估,第二次访问此类文件时,它已经在内存中。
查看directory-tree,尤其是readDirectoryWithL
功能。