最終的に、メッセージをキータプルとして格納する単純なメモリメッセージキューを実現したい。 {Dst-IP、Dst-Port {CreationTime、MessageList}}特定の宛先IPアドレスと宛先ポートの今後のすべてのメッセージをMessageListに追加する必要があります。Data.PSQueueとタイプが一致しない
私はData.PSQueue(またはおそらくData.Map)を呼び出すことを考えました。上記のDst-IPの例では、Dst-Portが鍵になる場合があり、CreationTimeが優先される可能性があります。 (実際のMessageListが何であるかはまだ分かりませんが、どういうわけか私は始めて見なければなりません)。
私は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)
ありがとうございました。単純なキーの代わりに質問テキストに記述されているように、キータプルを使用させる簡単な方法はありますか?たぶんレコードを使用するのでしょうか? –
タプルやその他のデータ型(レコードなど)をキーとして使用できませんでしたか? – ehird