Non è possibile cambiare la maniglia stdin
in Haskell. In Python, le variabili sys.stdin
soli punti a una maniglia, in modo che quando si sostituiscono con un nuovo handle di file, il vecchio stdin
maniglia rimane, ma il sys.stdin
variabile ora contiene l'handle di file.
Poiché l'handle System.IO.stdin
è immutabile in Haskell (come lo sono molte altre variabili, o dovrei dire valori), non è possibile fare la stessa cosa in Haskell.
Quello che puoi fare è aprire il file /dev/tty
con una nuova maniglia e usarlo per leggere dal terminale. È possibile utilizzare tutte le stesse operazioni su qualsiasi handle possibile su stdin
. È sufficiente importare System.IO
e ogni volta che si usa il foo ...
per ottenere qualche input, utilizzare invece hFoo handle ...
. Per esempio, per leggere una riga dal terminale, di questo codice:
import System.IO
-- ...
newstdin <- openFile "/dev/tty" ReadMode
-- Instead of normal getLine; just prepend "h" and pass the handle
line <- hGetLine newstdin
Non dimenticare di chiudere il nuovo manico con una chiamata a hClose
!