0
websocketリクエスト内でDBクエリを実行しようとしています。それはthisの例の適応です。MonadHandlerを実行する必要がありますがSTMを返す
これを行うには、race_
を作成しようとします。これには、DBにクエリするのに使用するMonadHandler
も含まれます。
handlerRace_
(forever $ atomically (readTChan readChan) >>= sendTextData)
(sourceWS $$ mapM_C (\msg -> atomically $ do
users <- lift (runDB $ selectList [] [] :: Handler [Entity User]) -- query the DB
writeTChan writeChan $ msg
))
handlerRace_ :: (MonadBaseControl IO m, MonadHandler m) => m a -> m b -> m()
handlerRace_ = race_
とエラー:これは、次の非作業コードと結果
Couldn't match type ‘t0 (HandlerT App IO)’ with ‘STM’
Expected type: STM [Entity User]
Actual type: t0 (HandlerT App IO) [Entity User]
In a stmt of a 'do' block:
users <- lift (runDB $ selectList [] [] :: Handler [Entity User])
私のああ、私は初心者であること嫌い - 愚かな過ちを...ありがとう! :) また、私はそれを出したら、私は特別な 'race_'を必要としません – amitaibu
ハスケルは時間がかかる心配しないでください! – MichaelO