我对 Data.Serialize 有疑问。当我对数据结构进行编码时,我可以对作为 Serialize 类实例的所有数据结构进行编码。这很好用。
然后我通过网络发送它。
但是,我在解码时遇到了问题。解码函数给了我一个名为“ Either String
”的类型,我不太清楚如何进一步使用它来重建我的原始数据结构,接收者只知道它以前是Serialize
.
receiveMessage :: Socket -> IO (a, SockAddr)
receiveMessage s = do
(msg, remoteSockAddr) <- recvFrom s 512
return (S.decode $ msg, remoteSockAddr)
Couldn't match type `a' with `Either String a0'
`a' is a rigid type variable bound by
the type signature for receiveMessage :: Socket -> IO (a, SockAddr)
In the expression: decode $ msg
In the first argument of `return', namely
`(decode $ msg, remoteSockAddr)'
In the expression: return (decode $ msg, remoteSockAddr)
使用 eg receiveMessage :: (Serialize a) => Socket -> IO (a, SockAddr)
也无济于事。我该如何处理并最好地取回我的原始数据结构?