Ich schrieb eine Funktion in Haskell, die ein paar Parameter wie Word32, String (ignorieren currying) und Ausgaben IO Word32 nimmt. Nun, dies ist eine Funktion im wahrsten Sinne des Wortes: für die gleichen Eingaben wird die Ausgabe immer die gleiche sein . Es gibt keine Nebeneffekte. Der Grund, warum die Funktion IO Word32 anstelle von Word32 zurückgibt, ist, dass die Funktion viele 32-Bit-Linear-Feedback-Shift-Register (lfsr) und andere Register mehrmals in einer Schleife aktualisiert, um die endgültige Word32-Ausgabe zu berechnen.
Meine Frage ist folgende: Angesichts der Tatsache, dass diese Funktion hat effektiv keine Nebenwirkungen Ist es möglich, diese Registeraktualisierungen innerhalb der Funktionsimplementierung zu verbergen, so dass die Funktion Word32 und nicht IO Word32 zurückgibt? Wenn ja, wie?