我有这个功能,负责网络聊天中的通信。没有t <- getClockTime
(这里是带代码的代码),一切正常:
talk :: WS.Protocol p => MVar State -> Client -> WS.WebSockets p ()
talk state client@(user, sink) = flip WS.catchWsError catchDisconnect $
forever $ do
t <- getClockTime
msg <- WS.receiveData
case () of
() | T.unpack(msg) == "#list" -> liftIO $ readMVar state >>= listClients client
| T.unpack(msg) == "#time" -> liftIO (sendTime client)
| "#name" `T.isPrefixOf` msg -> liftIO (command msg client)
| otherwise -> liftIO $ readMVar state >>= broadcast
(user `mappend` msg)
where
catchDisconnect e = case fromException e of
Just WS.ConnectionClosed -> liftIO $ modifyMVar_ state $ \s -> do
let new_state = removeClient client s
return new_state
_ -> return ()
t <- getClockTime
我收到错误:
Couldn't match type `WS.WebSockets p0' with `IO'
Expected type: IO Text
Actual type: WS.WebSockets p0 Text
In a stmt of a 'do' block: msg <- WS.receiveData
In the second argument of `($)', namely
`do { t <- getClockTime;
msg <- WS.receiveData;
case () of {
()
| T.unpack (msg) == "#list"
-> liftIO $ readMVar state >>= listClients client
| T.unpack (msg) == "#time" -> liftIO (sendTime client)
| "#name" `T.isPrefixOf` msg -> liftIO (command msg client)
| otherwise
-> liftIO $ readMVar state >>= broadcast (user `mappend` msg) } }'
In the second argument of `($)', namely
`forever
$ do { t <- getClockTime;
msg <- WS.receiveData;
case () of {
()
| T.unpack (msg) == "#list"
-> liftIO $ readMVar state >>= listClients client
| T.unpack (msg) == "#time" -> liftIO (sendTime client)
| "#name" `T.isPrefixOf` msg -> liftIO (command msg client)
| otherwise
-> liftIO $ readMVar state >>= broadcast (user `mappend` msg) } }'
我怎样才能得到这段时间并将其与msg连接?