Ich versuche, eine Liste von ganzen Zahlen in diesem Format auszudrucken
%Vor%Also nimmt meine Funktion eine Liste von ganzen Zahlen und gibt ein IO () wie folgt zurück:
%Vor%Aber ghc gibt mir den Fehler:
%Vor%Nun verstehe ich, dass die Funktion durch die Liste laufen würde, wobei zuerst das erste Element 'x' und dann: printVector xs den Rest der Liste rekursiv aufrufen würde, indem für jedes Element dieselbe putStr-Funktion angewendet wird die Liste.
Aber ich denke, mein Problem ist, wo ich tue: printVector xs? Kann jemand darauf hinweisen, was ich hier falsch mache?
Sie müssen die Liste überlisten, aber da es sich um IO-Aktionen handelt, müssen Sie sie ebenfalls ausführen (da map
eine Liste von IO-Aktionen zurückgibt, ohne sie auszuführen, siehe folgendes Beispiel).
Es gibt bereits eine Funktion, es ist mapM
. So kann das Beispiel vereinfachen als:
Sie können auch mapM_
verwenden, das stattdessen sequence_
verwendet, und das Ergebnis der Ausführung der IO-Aktion für jedes der Elemente ignorieren. Daher ist der Rückgabetyp IO ()
anstelle von IO [()]
(vorheriges Beispiel).