Как прочитать файл, указанный в качестве параметра функции, при запуске GHCI?
Вопрос
Я использую ghci 6.10.4 в командной строке DOS в XP, а также в Emacs, используя Haskell-mode-2.4.
Есть ли способ перенаправить файл на стандартный ввод при запуске программ, работающих со стандартным вводом?Например, если у меня есть функция main, которая читает из стандартного ввода, я не смогу:
*Main> main < words.txt
Есть ли другой способ?
Также я хотел бы иметь возможность вводить стандартный ввод в окно ghci, что, похоже, работает, но что такое ключ EOF?Я думал, что это Ctrl-D, но это не сработало.
Решение
Это будет проще, если вы переработаете свой main
чтобы открыть сам файл.
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
Не передавайте EOF на стандартный ввод, находясь в GHCi.Если вы это сделаете, все дальнейшие попытки чтения со стандартного ввода потерпят неудачу:
Prelude> getLine *** Exception: <stdin>: hGetLine: illegal operation (handle is closed) Prelude> getContents *** Exception: <stdin>: hGetContents: illegal operation (handle is closed)
Другие советы
Вы МОЖЕТЕ ввести :main в GHCi для вызова параметров командной строки.Боюсь, вам, вероятно, просто захочется это использовать.