TCP funktioniert in GHCi, gepuffert bis zum Beenden des Programms in einem mit Leksah kompilierten Programm
-
28-10-2019 - |
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
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".