I'm using ghci 6.10.4 at the dos command line in XP, and also in emacs using haskell-mode-2.4
When running programs that operate on stdin, is there a way I can redirect a file to be stdin? For example if I have a function called main that reads from stdin, I can't do:
*Main> main < words.txt
Is there another way?
Also I would like to be able to type stdin into the ghci window, which seems to work, but what is the EOF key? I thought it was Ctrl-D but that doesn't work.
This will be easier if you rework your main
to open the file itself.
import System.Environment
import System.IO
main :: IO ()
main = do
args <- getArgs
case args of
[] -> doStuff stdin
file:_ ->
withFile file ReadMode doStuff
doStuff :: Handle -> IO ()
doStuff = …
*Main> System.Environment.withArgs ["main.txt"] main
Don't give a EOF on stdin while within GHCi. If you do, all further attempts to read from stdin will fail:
Prelude> getLine *** Exception: <stdin>: hGetLine: illegal operation (handle is closed) Prelude> getContents *** Exception: <stdin>: hGetContents: illegal operation (handle is closed)