我想完成race_
功能,但我不知道该怎么做。
这是我现在的代码:
mainLoop :: Handle -> String -> IO ()
mainLoop handle username = do
_ <- race_ fromServer toServer
putStrLn "Race is done"
return ()
where
fromServer = forever $ do
line <- hGetLine handle
putStrLn $ "Server: " ++ line
toServer = do
line <- getLine
case line of
":quit" -> do
--hPutStrLn handle "blabla"
return ()
_ -> do
hPutStrLn handle $ line
toServer
如果我取消注释行hPutStrLn handle "blabla"
,则用户在键入Race is done
时会看到:quit
。如果没有该行,当用户键入:quit
时,程序就会挂起。
使用hPutStrLn handle "blabla"
只是为了完成race_
我觉得不对。我假设有一个更好的功能来完成race_
功能。有什么想法吗?
我觉得奇怪的是,简单的return ()
不起作用,因为hPutStrLn
和return
都返回空IO操作。
可以找到完整的上下文here。句柄由handle <- connectTo "localhost" (PortNumber 4000)
创建。服务器在server.hs中创建。我在Windows 7的“Git bash”(msysgit)中使用runhaskell
运行此代码。
答案 0 :(得分:1)
在上下文中使用
import System.IO
import Control.Concurrent.Async
import Control.Monad
main = do
h <- openFile "./a" ReadWriteMode
mainLoop h "user"
hClose h
没有hPutStrLn也能正常工作 - 你做了什么? (其中./a是一个大文件,例如&#34; dmesg&gt; a&#34;)