我在 XP 的 dos 命令行中使用 ghci 6.10.4,在 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
在 GHCi 中不要在标准输入上给出 EOF。如果这样做,所有进一步尝试从标准输入读取都将失败:
前奏> getLine *** 例外:<stdin>:hGetLine:非法操作(句柄已关闭) Prelude> 获取内容 *** 例外:<stdin>:hGetContents:非法操作(句柄已关闭)
您可以在 GHCi 中键入 :main 来调用命令行参数。恐怕您可能只想使用它。