Skid
Erfahrenes Mitglied
Hallo zusammen,
ich habe in der Haskell-Wiki gekramt, da ich derzeit im Rahmen meines Studiums eine Ausarbeitung anfertigen muss zum Thema Iteratee IO. Ich bin über die Wiki auf folgende Funktionen gestoßen:
Ich verstehe den Kern der Funktion. Das heißt, dass bei Done, der Iteratee mit dem Berarbeiten fertig ist und den Inhalt der Datei ausgibt. Bei Next wird nacheinander geprüft, ob sich die Datei am Ende der Datei befindet. Im Fall 'False' wird weiterhin ein Zeichen aus der Datei gelesen, im Falle von 'True' Nothing zurückgegeben, wohin der Iteratee das Signal bekommt, dass die Datei erschöpft ist, bzw. am Ende ist. Was mir jetzt nicht ganz kalr ist, ist dieses 'rc', die ersten drei Zeilen und das 'it' hinter der Klammer. Der Ausdruck in der Klammer selbst ist ja eine Lambda Funktion, mit dem Parameter 'rc', oder ist das schon falsch?
Ich hoffe ihr könnt mir da weiterhelfen. Ich verstehe zwar so einiges in Haskell, aber da ich relativ neu bin, sind solche komplizierte Funktionen für mich eher undurchsichtig.
Beste Grüße,
SKiD.
ich habe in der Haskell-Wiki gekramt, da ich derzeit im Rahmen meines Studiums eine Ausarbeitung anfertigen muss zum Thema Iteratee IO. Ich bin über die Wiki auf folgende Funktionen gestoßen:
Code:
enumerator :: FilePath -> Iteratee (Maybe Char) o -> IO o
enumerator file it = withFile file ReadMode
$ \h -> fix (\rc it -> case it of
Done o -> return o
Next f -> do
eof <- hIsEOF h
case eof of
False -> do
c <- hGetChar h
rc (f (Just c))
True -> rc (f Nothing)
) it
Ich verstehe den Kern der Funktion. Das heißt, dass bei Done, der Iteratee mit dem Berarbeiten fertig ist und den Inhalt der Datei ausgibt. Bei Next wird nacheinander geprüft, ob sich die Datei am Ende der Datei befindet. Im Fall 'False' wird weiterhin ein Zeichen aus der Datei gelesen, im Falle von 'True' Nothing zurückgegeben, wohin der Iteratee das Signal bekommt, dass die Datei erschöpft ist, bzw. am Ende ist. Was mir jetzt nicht ganz kalr ist, ist dieses 'rc', die ersten drei Zeilen und das 'it' hinter der Klammer. Der Ausdruck in der Klammer selbst ist ja eine Lambda Funktion, mit dem Parameter 'rc', oder ist das schon falsch?
Ich hoffe ihr könnt mir da weiterhelfen. Ich verstehe zwar so einiges in Haskell, aber da ich relativ neu bin, sind solche komplizierte Funktionen für mich eher undurchsichtig.
Beste Grüße,
SKiD.