2016-10-24 3 views
2

Compte tenu de la websockets example comment puis-je avoir Handler opérations connexes tels que runDB à l'intérieur (par exemple runDB $ selectList ...)opérations Run Monad enveloppé par un autre Monad

Voici un exemple non de travail de ce que je veux faire:

chatStream :: WebSocketsT Handler() 
chatStream = do 
    users <- liftIO $ runDB $ selectList [] [] :: Handler [Entity User] -- This line is not working 
    sendTextData ("Welcome to the chat server, please enter your name." :: Text) 
    -- .... 

est ici l'erreur:

Couldn't match type ‘HandlerT App IO [Entity User]’ 
       with ‘ReaderT 
         websockets-0.9.7.0:Network.WebSockets.Connection.Connection 
         Handler 
         t0’ 
Expected type: ReaderT 
       websockets-0.9.7.0:Network.WebSockets.Connection.Connection 
       Handler 
       t0 
    Actual type: Handler [Entity User] 
In a stmt of a 'do' block: 
    users <- liftIO $ runDB $ selectList [] [] :: Handler [Entity User] 
+0

Pouvez-vous ajouter l'erreur que vous obtenez à la question s'il vous plaît – lightandlight

+0

Oh, désolé, j'ai ajouté le message d'erreur. – amitaibu

Répondre

1

la réponse est d'utiliser lift et non liftIO

users <- lift $ (runDB $ selectList [] [] :: Handler [Entity User])