是否有类似于liftIO
相反的东西?我正在使用WebSockets,并希望能够在单独的线程中监听来自服务器的消息。下面是我的代码:
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单子中运行 printMessages
?
runWithSocket
?通常,要从MonadIO m
转换为IO
,你需要一些runXY
函数。 - Daniel Fischer