#haskell #yesod
#haskell #yesod
Вопрос:
Учитывая пример websockets, как я могу иметь Handler
связанные операции, такие как runDB
внутри (например runDB $ selectList ...
)
Вот нерабочий пример того, что я хочу сделать:
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)
-- ....
Вот ошибка:
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]
Комментарии:
1. Не могли бы вы добавить ошибку, которую вы получаете, к вопросу, пожалуйста
2. О, извините, я добавил сообщение об ошибке.
Ответ №1:
Ответ заключается в том, чтобы использовать lift
и не liftIO
users <- lift $ (runDB $ selectList [] [] :: Handler [Entity User])