4

開発中のサーバーにコマンドを送信するために、この単純なプロトタイプクライアントを作成しました。GHCiで完全に動作しますが、コンパイルされたバージョンは、「quit」と入力してプログラムが終了するまで、入力されたすべてのものをバッファリングします。その時点で、すべての入力テキストが送信されます。

私は何が間違っているのですか?そして、コンパイルするとなぜ違うのですか?

更新:を使用してコンパイルすると、期待どおりに機能しghc Main.hsます。この問題は、[パッケージ]->[ビルド]を介してLeksahでコンパイルすると発生します。Leksahが使用しているコマンドラインを取得する方法を知っている人はいますか?

システム情報:OSX 10.6、GHC 7.0.3、ネットワーク2.3.0.2

module Main (
    main
) where

import System.IO
import Network

main = do
    hServer <- connectTo "localhost" (PortNumber 7000)
    hSetBuffering hServer NoBuffering
    loop hServer
    hClose hServer
    where loop :: Handle -> IO ()
          loop hServer = do
            s <- getLine
            hPutStrLn hServer s
            case s of "quit" -> return ()
                      otherwise -> loop hServer
4

2 に答える 2

1

うーん、私が思ったとき、レクサは実際にアプリを構築していなかったようです。hSetBuffering私は呼び出しなしで古いコードを実行していたに違いありません。クリーン&リビルドはそれを整理しました。お詫びと皆さんの時間と助けに感謝します。

編集:見つけました-他の誰かがこれに混乱した場合に備えて、package-> buildをクリックすると、Leksahはdebug/ghciモードの場合にコンパイル済みアプリを生成しません。

于 2011-05-05T09:16:44.293 に答える
1

Leksahは「cabalbuild」、古いバージョンは「runhaskellSetupbuild」を使用します。

于 2011-05-05T06:03:11.700 に答える