Ich versuche, einen URL-View-Klon in Haskell zu schreiben. Das Programm liest eine Nachricht (über STDIN piped), extrahiert alle URLs und fordert den Benutzer auf, eine davon auszuwählen.
Nach dem Lesen der Nachricht erreicht STDIN offensichtlich EOF. In Python setze ich STDIN wie folgt zurück
%Vor%Wie würde ich das gleiche in Haskell erreichen?
Sie können die Zugriffsnummer stdin
in Haskell nicht ändern. In Python zeigt die Variable sys.stdin
nur auf ein Handle. Wenn Sie es also durch ein neues Datei-Handle ersetzen, bleibt das alte stdin
Handle erhalten sys.stdin
Variable enthält jetzt die Dateikennung.
Seit dem System.IO.stdin
handle ist in Haskell unveränderlich (wie so viele andere Variablen, oder sollte ich Werte sagen), können Sie in Haskell nicht dasselbe tun.
Sie können die Datei /dev/tty
mit einem neuen Handle öffnen und diesen Handle verwenden, um vom Terminal zu lesen. Sie können die gleichen Operationen für jedes Handle verwenden wie für stdin
. Importieren Sie einfach System.IO
, und jedes Mal, wenn Sie es sonst tun würden Verwenden Sie foo ...
, um eine Eingabe zu erhalten, stattdessen hFoo handle ...
. Um beispielsweise eine Zeile vom Terminal zu lesen, verwenden Sie diesen Code:
Vergessen Sie nicht, Ihr neues Handle mit einem Aufruf von hClose
! zu schließen!