Eine zweite Möglichkeit I/O in refentiell transparenter Weise in Gofer zu realisieren, ist über Continuations. Hier steht der sequentialisierte Charakter von I/O-Funktionen im Vordergrund. Eine I/O-Funktion hat dabei immer eine Reihe von Argumenten nach folgenden Muster: zuerst folgen die Argumente, die für die I/O-Operation notwendig sind. Dieses kann z.B. der Dateiname einer zu lesenden Datei sein. Dann folgt als ein weiteres Argument eine I/O-Funktion, die ausgeführt werden soll, wenn die I/O-Operation vom Betriebssystem nicht erfolgreich abgeschlossen werden kann, und als ein letztes Argument folgt die I/O-Funktion, die ausgeführt werden soll, wenn die I/O-Operation vom Betriebssystem erfolgreich abgeschlossen werden konnte. In der Gofer-Prelude sind solche Continuation-I/O-Funktionen definiert. Mit ihnen läßt sich recht bequem I/O in Gofer realisieren.
Beispiele:
helloWord = appendChan stdout "hello worls\n" abort done showFile name = readFile name (\_ -> appendChan stdout ("Can't open " ++ name) abort done) (\result -> appendChan stdout result abort done) moin = appendChan stdout "Geben Sie ein Zahl ein: " abort readzahl readzahl = readChan stdin abort writequadrat writequadrat zahl = appendChan stdout ("\n Das Quadrat von ++ (head (lines zahl)) ++ " ist: "++ ausgabe ++ "!\n" ) abort done where ausgabe = int2string ((str2int (head (lines zahl)))^2) str2int x = str2intaux x 0 str2intaux "" a = a str2intaux (n:ns) a = str2intaux ns ((10*a)+(ord n) - 48)