6

我在 XP 的 dos 命令行中使用 ghci 6.10.4,在 emacs 中也使用 haskell-mode-2.4

运行在标准输入上运行的程序时,有没有办法可以将文件重定向为标准输入?例如,如果我有一个从标准输入读取的名为 main 的函数,我不能这样做:

*Main> main < words.txt

还有其他方法吗?

另外我希望能够在 ghci 窗口中输入标准输入,这似乎可以工作,但是 EOF 键是什么?我以为是 Ctrl-D 但这不起作用。

4

2 回答 2

6

如果您重新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

在 GHCi 中不要在标准输入上给出 EOF。如果这样做,所有进一步尝试从标准输入读取都将失败:

前奏> getLine
*** 例外:<stdin>:hGetLine:非法操作(句柄已关闭)
Prelude> 获取内容
*** 例外:<stdin>:hGetContents:非法操作(句柄已关闭)
于 2009-11-14T21:13:43.757 回答
4

您可以在 GHCi 中键入 :main 来调用命令行参数。恐怕您可能只想使用它。

于 2009-11-14T21:42:27.857 回答