我想从 Haskell 的硬盘中读取一个大的图形结构。图结构如下所示:
每个节点都有一个定义 - 一个描述子节点以及它们如何连接的文件(这些图使用 Data.Serialize
进行序列化。
每个节点都可以有子节点。所以如果我有文件 A.node
我可以有目录 A
包含 A
的 child 节点(以 <X>.node
文件和目录的形式)。
我希望能够使用 Haskell 遍历此图并加载到内存并仅反序列化需要的文件。因此,例如,如果我以 A->B->C
的方式遍历图形(其中 B
是 A
等的 child ),那么 Haskell 应该读取文件 A.node
, A/B.node
和 A/B/C.node
.下次我遍历图形时,文件应该是 不是 再次阅读,因为我们已经这样做了。
我怎样才能以最好的方式做到这一点?
最佳答案
有些库可以为您提供代表完整目录树的纯值,并且只会读取实际使用的那些目录和文件。凭借惰性求值,您第二次访问这样的文件时,它已经在内存中了。
退房 directory-tree ,尤其是 readDirectoryWithL
功能。
关于file - Haskell 延迟打开和关闭文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17570281/