相关疑难解决方法(0)

Haskell管道和分支

问题

我正在尝试使用Haskell和Pipes库实现一个简单的Web服务器.我现在明白管道不可能使用循环或钻石拓扑,但我认为我想要的是.因此我想要的拓扑结构是:

                                 -GET--> handleGET >-> packRequest >-> socketWriteD
                                 |
socketReadS >-> parseRequest >-routeRequest
                                 |
                                 -POST-> handlePOST >-> packRequest >-> socketWriteD
Run Code Online (Sandbox Code Playgroud)

我有HTTPRequest RequestLine Headers MessageHTTPResponse StatusLine Headers Message链中使用的类型.socketReadS从套接字中获取字节并将它们转发给它parseRequest,它使用Attoparsec将字节解析为一个HTTPRequest对象.然后,我希望管道分支至少两次,可能更多,具体取决于我实现的HTTP方法数量.每个handle<method>函数都应该接收HTTPRequest来自上游和前向HTTPResponse对象的对象packRequest,这些对象只是将HTTPResponse对象打包成一个ByteString随时可以发送的对象socketWriteS.

如果我让GHC推断出类型,那么下面的代码可以检查routeRequest'''(我的某种方式似乎有些偏差).但是之后似乎没有任何事情在执行parseRequest.任何人都可以帮我找出原因吗?

我有以下代码routeRequest应该处理分支.

routeRequest''' ::
    (Monad m, Proxy p1, Proxy p2, Proxy p3)
    => () -> Consumer p1 HTTPRequest (Pipe p2 HTTPRequest HTTPRequest (Pipe p3 …
Run Code Online (Sandbox Code Playgroud)

haskell haskell-pipes

10
推荐指数
1
解决办法
1058
查看次数

标签 统计

haskell ×1

haskell-pipes ×1