有沒有什麼東西與liftIO
相反?我使用的是websockets,我希望能夠在單獨的線程中監聽來自服務器的消息。下面是我在做什麼:在IO monad中使用monad
import Network.WebSockets
import qualified Data.Text as T
import Control.Monad.IO.Class
import Control.Monad
import Control.Concurrent
import Control.Applicative
printMessages :: WebSockets Hybi00()
printMessages = forever $ do
resp <- receiveDataMessage
liftIO $ print resp
run :: WebSockets Hybi00()
run = do
liftIO . forkIO $ printMessages
forever $ do
line <- liftIO getLine
sendTextData . T.pack $ line
main = connect "0.0.0.0" 8080 "/" run
所以printMessages
偵聽來自服務器的消息,並不停打印出來。問題是,forkIO
需要返回IO()
的函數。有什麼辦法可以讓我在IO monad中運行printMessages
?
['runWithSocket'](http://hackage.haskell.org/packages/archive/websockets/latest/doc/html/ Network-WebSockets.html#v:runWithSocket)或許?一般來說,爲了從'MonadIO m'到'IO',你需要一些'runXY'函數。 – 2013-05-08 21:57:15