Ich bin wirklich neu in Haskell, also könnte das eine dumme Frage sein. Ich habe eine Funktion
%Vor%, dessen Ergebnis einige nützliche Informationen ausgeben wird. Jetzt möchte ich das tun:
%Vor%Wie kann ich das als Schleife schreiben? Mein Problem ist es, die Monaden zu "verketten", was automatisch durch die do-Anweisung geschieht ...
Danke für Ihre Hilfe!
mapM_ foo [0,1,0,2,3]
wird den Trick machen.
Was vielleicht noch wichtiger ist: "Wie findet man das heraus?" Hoogle ist ein wunderbares Werkzeug. Sie möchten eine Funktion mit der Signatur Int -> IO ()
auf eine Menge Int
s anwenden, um eine neue IO-Aktion zu erhalten. Das, wonach du suchst, wird also die Signatur (Int -> IO ()) -> [Int] -> IO ()
haben, also gehen wir und fragen Sie Hoogle nach Funktionen mit dieser Unterschrift . Das zweite Ergebnis ist mapM_
, dessen Signatur ist
Richtig, also arbeitet mapM_
tatsächlich mit beliebigen Monaden (nicht nur IO
) und beliebigen Typen (nicht nur Int
). Wenn Sie darüber nachdenken, ist das überhaupt nicht überraschend.
Sie möchten den mapM_
-Kombinator, der eine Funktion zur Rückgabe eines monadischen Werts über eine Liste abbildet und den Bind-Operator verwendet, um die Ergebnisse zu sequenzieren:
Manchmal benutzen Leute gerne die umgedrehte Version
%Vor%sieht eher nach Imperativcode aus:
%Vor% Beachten Sie, dass ein Kombinator namens forM_
in Control.Monad
definiert ist und genau dasselbe tut wie der Kombinator, den ich for
genannt habe.
Tags und Links haskell