Ich kann keine Problemumgehung für dieses Problem finden, das ich habe.
Ich habe so etwas:
%Vor%Ich versuche, x Menge der gültigen Dateipfade zu erhalten, wobei x die Anzahl der Tage ist, die ich möchte, aber der obige Code läuft einfach für immer. Ich habe dieses Problem schon einmal mit Monaden gehabt und ich habe mich gefragt, ob es einen Workaround für dieses Problem gibt.
Danke!
Der Code läuft für immer, weil Sie versuchen, eine unendliche Anzahl von Nebeneffekten in Ihrem Aufruf nach mapM
zu sequenzieren.
Da Sie nicht im Voraus wissen, wie viele dieser Berechnungen Sie ausführen müssen (wie Sie mit catMaybes
angeben), müssen Sie die Aufrufe von getFilePathForDay
mit dem Rest Ihrer Daten verschachteln Berechnung. Dies könnte mit unsafeInterleaveIO
erfolgen, aber wie der Name schon sagt, ist dies kein empfohlener Ansatz.
Sie können dies manuell wie folgt implementieren:
%Vor%Es gibt wahrscheinlich einen eleganteren Weg, aber es kommt jetzt nicht zu mir:)
Manchmal ist Lazy IO der richtige Ansatz. Da Sie eine unendliche, träge Sequenz von Tagen haben und Sie nur einen (dynamischen) Bereich von dieser Sequenz abtasten, sollten wir das Dateisystem auch nur bei Bedarf treffen.
Dies kann mit unsafeInterleaveIO
:
Dabei gibt go
einen faulen Ergebnisstrom zurück, und wir nehmen so viele, wie wir brauchen. Einfach.
Tags und Links haskell monads lazy-evaluation