TCP funktioniert in GHCi, gepuffert bis zum Beenden des Programms in einem mit Leksah kompilierten Programm

StackOverflow https://stackoverflow.com/questions/5890054

Frage

Ich habe diesen einfachen Prototyp-Client geschrieben, um Befehle an einen Server zu senden, den ich entwickle.Es funktioniert perfekt in GHCi, aber die kompilierte Version puffert alles, was eingegeben wurde, bis ich "quit" eingebe und das Programm beendet wird.Zu diesem Zeitpunkt wird der gesamte Eingabetext gesendet.

Was mache ich falsch?Und warum ist es beim Kompilieren anders?

Update: Es funktioniert wie erwartet, wenn es mit ghc Main.hs kompiliert wird.Das Problem tritt auf, wenn es mit Leksah über Paket -> Erstellen kompiliert wird.Weiß jemand, wie man die Befehlszeile erhält, die Leksah verwendet?

Systeminfo: OSX 10.6, GHC 7.0.3, Netzwerk 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

War es hilfreich?

Lösung 2

Hmm, anscheinend hat Leksah die App nicht wirklich erstellt, als ich dachte, dass es so ist.Ich muss alten Code ohne den hSetBuffering-Aufruf ausgeführt haben.Ein Clean & Rebuild hat es geklärt.Entschuldigung und vielen Dank an alle für Ihre Zeit und Hilfe.

Bearbeiten: Gefunden - falls jemand anderes dadurch verwirrt wird, wenn auf Paket-> Build geklickt wird, generiert Leksah keine kompilierte App, wenn es sich im Debug / Ghci-Modus befindet.

Andere Tipps

Leksah verwendet "cabal build", ältere Versionen "runhaskell Setup build".

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top