给出一个简单的JSON类型示例:
data Test = Test
{ name :: Text
, age :: Int
} deriving (Show, Generic)
instance FromJSON Test
如何使用pipe-aeson解码使用decoded
镜头通过套接字传输的JSON消息流?作为一个例子,我想在他们解析时将它们打印出来:
main = connect "127.0.0.1" "8000" $ \(socket, _) -> $ runEffect $
some use of zoom decoded? view decoded? >-> P.print
答案 0 :(得分:3)
decoded
(来自Pipes.Aeson.Unchecked
的那个)是一个镜头,而不是将原始字节的生产者转换为已解析的FromJSON
值的生产者。
因此,我们必须首先使用pipes-network
包中的fromSocket
函数从套接字中创建字节的生产者。像这样:
-- to help with type inference
printTest :: (MonadIO m) => Consumer' Test m r
printTest = P.print
main = do
connect "127.0.0.1" "8000" $ \(socket, _) -> $ runEffect $
view decoded (fromSocket socket 4096) >-> printTest
return ()