Nie można zmienić uchwyt stdin
w Haskell. W Pythonie, że sys.stdin
zmiennej tylko punkty do uchwytu, dzięki czemu podczas zastąpić go nowym uchwytu pliku, stary stdin
uchwyt nadal pozostaje, ale sys.stdin
zmienna teraz zawiera uchwyt pliku.
Ponieważ uchwyt System.IO.stdin
jest niezmienny w Haskell (ponieważ jest tak wiele innych zmiennych, lub powinienem powiedzieć wartości), nie można zrobić tego samego w Haskell.
Możesz otworzyć plik /dev/tty
za pomocą nowej klamki i użyć tego uchwytu do odczytania z terminala. Możesz użyć wszystkich tych samych operacji na dowolnym uchwycie, jak to możliwe na stdin
. Po prostu zaimportuj System.IO
, a za każdym razem, gdy w przeciwnym razie użyjesz foo ...
, aby uzyskać pewne dane wejściowe, zamiast tego użyj hFoo handle ...
. Na przykład, aby przeczytać linię od terminalu, użyj tego kodu:
import System.IO
-- ...
newstdin <- openFile "/dev/tty" ReadMode
-- Instead of normal getLine; just prepend "h" and pass the handle
line <- hGetLine newstdin
nie zapomnij zamknąć nowy uchwyt z wezwaniem do hClose
!