Как прочитать файл, указанный в качестве параметра функции, при запуске GHCI?

StackOverflow https://stackoverflow.com/questions/1735386

  •  20-09-2019
  •  | 
  •  

Вопрос

Я использую 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 для вызова параметров командной строки.Боюсь, вам, вероятно, просто захочется это использовать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top