TCP travaille à GHCI, tamponné jusqu'à la sortie du programme dans le programme compilé avec Leksah
-
28-10-2019 - |
Question
J'ai écrit ce client de prototype simple pour envoyer des commandes à un serveur que je développe. Il fonctionne parfaitement en cours d'exécution dans GHCI, mais la version compilée tamponne tout ce qui est tapé jusqu'à ce que je tape "quit" et le programme sort. À ce stade, tout le texte d'entrée est envoyé.
Qu'est-ce que je fais mal? Et pourquoi est-ce différent lorsqu'il est compilé?
Mise à jour: cela fonctionne comme prévu s'il est compilé avec ghc Main.hs
. Le problème se produit lorsqu'il est compilé avec Leksah via le package -> build. Quelqu'un sait comment utiliser la ligne de commande que Leksah utilise?
Informations système: OSX 10.6, GHC 7.0.3, réseau 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
La solution 2
Hmm, il semble que Leksah ne construisait pas réellement l'application quand je le pensais. Je devais exécuter un vieux code sans le hSetBuffering
appel. Un nettoyage et une reconstruction l'ont réglé. Excuses et merci à tous pour votre temps et votre aide.
Éditer: Trouvé - au cas où quelqu'un d'autre sera confus par cela, lorsque le package-> build est cliqué, Leksah ne génère pas une application compilée si elle est en mode de débogage / ghci.
Autres conseils
Leksah utilise "Cabal Build", des versions anciennes "Runhaskell Configuration Build".