Bewertung der monadischen Funktionen in Haskell

8

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!

    
Charles Durham 09.05.2011, 16:38
quelle

2 Antworten

8

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:)

    
hammar 09.05.2011, 16:52
quelle
4

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 :

gemacht werden %Vor%

Dabei gibt go einen faulen Ergebnisstrom zurück, und wir nehmen so viele, wie wir brauchen. Einfach.

    
Don Stewart 09.05.2011 18:30
quelle

Tags und Links