6

XPのdosコマンドラインでghci 6.10.4を使用しています。また、haskell-mode-2.4を使用するemacsでも使用しています

stdin で動作するプログラムを実行している場合、ファイルを stdin にリダイレクトする方法はありますか? たとえば、標準入力から読み取る main という関数がある場合、次のことはできません。

*Main> main < words.txt

別の方法はありますか?

また、動作しているように見える ghci ウィンドウに stdin を入力できるようにしたいのですが、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 = …
*メイン> System.Environment.withArgs ["main.txt"] メイン

GHCi 内で stdin に EOF を与えないでください。その場合、stdin から読み取ろうとする以降の試みはすべて失敗します。

プレリュード> getLine
*** 例外: <stdin>: hGetLine: 不正な操作 (ハンドルが閉じられている)
プレリュード> getContents
*** 例外: <stdin>: hGetContents: 不正な操作 (ハンドルが閉じられている)
于 2009-11-14T21:13:43.757 に答える
4

GHCiに:mainと入力して、コマンドラインパラメータを呼び出すことができます。おそらくそれを使いたくなるのではないかと思います。

于 2009-11-14T21:42:27.857 に答える