TCP funziona in GHCi, bufferizzato fino all'uscita del programma nel programma compilato con Leksah
-
28-10-2019 - |
Domanda
Ho scritto questo semplice client prototipo per inviare comandi a un server che sto sviluppando.Funziona perfettamente in GHCi, ma la versione compilata bufferizza tutto ciò che viene digitato fino a quando non digito "quit" e il programma esce.A quel punto viene inviato tutto il testo di input.
Cosa sto facendo di sbagliato?E perché è diverso quando viene compilato?
Aggiorna: funziona come previsto se compilato con ghc Main.hs
.Il problema si verifica quando viene compilato con Leksah tramite Package -> Build.Qualcuno sa come ottenere la riga di comando che Leksah sta usando?
Informazioni di sistema: OSX 10.6, GHC 7.0.3, rete 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
Soluzione 2
Hmm, sembra che Leksah non stesse realizzando l'app quando pensavo che lo fosse.Devo aver eseguito il vecchio codice senza la chiamata hSetBuffering
.Un clean & rebuild ha risolto il problema.Ci scusiamo e grazie a tutti per il vostro tempo e aiuto.
modifica: Trovato: nel caso in cui qualcun altro si confonda, quando si fa clic su package-> build, Leksah non genera un'app compilata se è in modalità debug / ghci.
Altri suggerimenti
Leksah usa "cabal build", le versioni precedenti "runhaskell Setup build".