Haskell 类型与Data.PSQueue不匹配

Haskell 类型与Data.PSQueue不匹配,haskell,Haskell,最后,我想实现一个简单的内存消息队列,它将消息存储为关键元组,例如{Dst IP、Dst端口{CreationTime、MessageList}},其中特定目的地IP地址和目的地端口的所有未来消息都应附加到MessageList中 我考虑过Inveting Data.PSQueue(或者Data.Map)。在Dst IP上面的示例中,Dst端口可以是密钥,而CreationTime可以是优先级。(我还不知道实际的消息列表可能是什么,但不知怎么的,我必须开始看看) 从PSQ开始,我甚至没有越过类型

最后,我想实现一个简单的内存消息队列,它将消息存储为关键元组,例如{Dst IP、Dst端口{CreationTime、MessageList}},其中特定目的地IP地址和目的地端口的所有未来消息都应附加到MessageList中

我考虑过Inveting Data.PSQueue(或者Data.Map)。在Dst IP上面的示例中,Dst端口可以是密钥,而CreationTime可以是优先级。(我还不知道实际的消息列表可能是什么,但不知怎么的,我必须开始看看)

从PSQ开始,我甚至没有越过类型的初始障碍。根据我修改下面代码段的方式,我会得到各种错误(使用查找函数或打印函数),这些错误都类似于

Couldn't match expected type `IO t0'
                with actual type `PSQ.PSQ k0 p0 -> Maybe p0'
或类似的。我怎样才能克服这个最初的问题? 有什么比Data.PSQueue更适合我的要求吗

{-# LANGUAGE OverloadedStrings #-}

import Control.Monad
import Control.Monad.State.Strict
import System.CPUTime

import qualified Data.PSQueue as PSQ
--import Language.Haskell.Pretty

main = do
     time <- getCPUTime
     let q = PSQ.singleton "msg" time
     r <- PSQ.lookup "msg"
     print (r)
{-#语言重载字符串}
进口管制
进口控制。单子。状态。严格
导入系统.CPUTime
将符合条件的Data.PSQueue导入为PSQ
--import Language.Haskell.Pretty
main=do

时间你写了
r你写了
r谢谢。有没有简单的方法可以让我使用问题文本中描述的键元组而不是简单的键?也许要使用记录?难道不能使用元组或其他数据类型(如记录)作为键吗?谢谢。有没有简单的方法可以让我使用问题文本中描述的键元组而不是简单的键?也许要使用记录?难道不能使用元组或其他数据类型(如记录)作为键吗?
main :: IO ()
main = flip runStateT PSQ.empty $ do
  time <- liftIO getCPUTime
  modify $ PSQ.insert "msg" time
  r <- gets $ PSQ.lookup "msg"
  liftIO . print $ r