TCP travaille à GHCI, tamponné jusqu'à la sortie du programme dans le programme compilé avec Leksah

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

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
Était-ce utile?

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".

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top