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

Я использую ghci 6.10.4 в командной строке DOS в XP, и также в emacs, использующем haskell-mode-2.4

Когда запущение программ, которые воздействуют на stdin, является там способом, которым я могу перенаправить файл, чтобы быть stdin? Например, если у меня есть функция, вызванная основной, который читает из stdin, я не могу сделать:

*Main> main < words.txt

Есть ли иначе?

Также я хотел бы смочь ввести stdin в ghci окно, которое, кажется, работает, но что EOF является ключевым? Я думал, что это был Ctrl-D, но это не работает.

6
задан Chris Stryczynski 31 August 2019 в 14:28
поделиться

2 ответа

Это будет проще, если вы переделаете свой 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. Если вы это сделаете, все дальнейшие попытки чтения из stdin потерпят неудачу:

Prelude> getLine
*** Exception: <stdin>: hGetLine: illegal operation (handle is closed)
Prelude> getContents
*** Exception: <stdin>: hGetContents: illegal operation (handle is closed)
6
ответ дан 10 December 2019 в 00:39
поделиться

Вы МОЖЕТЕ ввести: main в GHCi для вызова параметров командной строки. Боюсь, вы, вероятно, просто захотите этим воспользоваться.

4
ответ дан 10 December 2019 в 00:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: