liftIO
の逆のようなものがありますか?私はWebSocketを使用しています。サーバーからのメッセージを別のスレッドで受信できるようにしたいと考えています。IOモナド内のモナドを使用する
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'](http://hackage.haskell.org/packages/archive/websockets/latest/doc/html/ Network-WebSockets.html#v:runWithSocket)おそらく?一般的に、 'MonadIO m'から' IO'を得るためには、 'runXY'関数が必要です。 –