Chcę przeczytać dużą strukturę wykresu z dysku twardego w Haskell. Struktura wykres wygląda następująco:Haskell leniwy otwieranie i zamykanie plików
Każdy węzeł ma definicji - plik opisujący jakie są dzieci i jak są one podłączone (te wykresy są szeregowane za pomocą Data.Serialize
Każdy węzeł może mieć dzieci, więc jeśli.. mam plik A.node
mogę mieć katalog zawierający A
dzieci A
węzła (w postaci <X>.node
plików i katalogów).
Chcę być w stanie przemierzać ten wykres używając Haskell i obciążenia do pamięci i unserialize tylko potrzebne Jeśli przejdę na przykład do wykresu na drodze A->B->C
(gdzie B
jest potomkiem A
itd.), Następnie Haskell powinien przeczytać pliki A.node
, A/B.node
i A/B/C.node
. Następnym razem, gdy przejdę przez wykres, pliki powinny być ponownie przeczytane, ponieważ zrobiliśmy to już.
Jak mogę to zrobić w najlepszy sposób?
Czy chcesz, aby zawartość plików była odczytywana leniwie, czy tylko otwierać plik w razie potrzeby? – bennofs
Chcę otworzyć i zamknąć plik leniwie, jeśli jest to możliwe. –
Co chcesz zrobić? Czy chcesz buforować zawartość pliku, tzn. Nie czytać ponownie tego pliku, gdy został już odczytany? Ponieważ to, co próbujesz zrobić, brzmi dla mnie jak zły pomysł. Prawdopodobnie chcesz użyć czegoś takiego jak [pipe] (http://hackage.haskell.org/package/pipes) lub [conduit] (http://hackage.haskell.org/package/conduit) – bennofs