0

给定一个简单的 JSON 类型示例:

data Test = Test
  { name :: Text
  , age  :: Int
  } deriving (Show, Generic)

instance FromJSON Test

如何使用管道 aeson 解码使用decoded镜头通过套接字传来的 JSON 消息流?作为一个例子,我想在解析它们时将它们打印出来:

main = connect "127.0.0.1" "8000" $ \(socket, _) -> $ runEffect $
  some use of zoom decoded? view decoded? >-> P.print
4

1 回答 1

3

decoded(来自 的那个Pipes.Aeson.Unchecked)是一个镜头,它将原始字节的 Producer 转换为解析FromJSON值的 Producer。

fromSocket因此,我们必须首先使用包中的函数从套接字中创建字节的生产者pipes-network。像这样的东西:

-- 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 ()
于 2015-03-16T07:56:08.230 回答