liftIO
'un tersi gibi bir şey var mı? Websockets kullanıyorum ve sunucudan iletileri ayrı bir iş parçacığında dinleyebilmek istiyorum.IO monad içinde bir monad kullanma
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
Yani printMessages
sunucudan gelen mesajları dinler ve bunların baskısının devam: İşte yapıyorum. Sorun şu ki, forkIO
, IO()
döndüren bir işlev bekliyor. IO monadında printMessages
'u çalıştırmamın bir yolu var mı?
[ 'runWithSocket'] (http://hackage.haskell.org/packages/archive/websockets/latest/doc/html/ Belki de Network-WebSockets.html # v: runWithSocket)? Genel olarak, bir 'MonadIO m''den' IO'ya geçmek için, bazı 'runXY' işlevine gereksinim duyarsınız. –