No se puede cambiar el mango stdin
en Haskell. En Python, las variables sys.stdin
sólo puntos a un mango, por lo que cuando se sustituya por un nuevo identificador de archivo, el viejo stdin
mango sigue siendo, pero la variable de sys.stdin
ahora contiene el identificador de archivo.
Dado que el mango System.IO.stdin
es inmutable en Haskell (como muchas otras variables, o debería decir valores), no se puede hacer lo mismo en Haskell.
Lo que puede hacer es abrir el archivo /dev/tty
con un nuevo identificador , y usar ese asa para leer desde el terminal. Puede usar todas las mismas operaciones en cualquier manejador que pueda en stdin
. Simplemente importe System.IO
, y cada vez que use foo ...
para obtener alguna entrada, en su lugar use hFoo handle ...
. Por ejemplo, para leer una línea desde el terminal, utilice este código:
import System.IO
-- ...
newstdin <- openFile "/dev/tty" ReadMode
-- Instead of normal getLine; just prepend "h" and pass the handle
line <- hGetLine newstdin
No se olvide de cerrar su nuevo mango con una llamada a hClose
!