我一直在阅读关于免费monad的一周。我想用free monads
实现Akka Http路由DSL。
我只有路径和http方法指令(post和get)。在Akka Http中,路由是 RequestContext - >未来[RouteResult]
这是我目前用户的外部dsl。
route {
path ("service-a") {
get
},
path ("service-b) {
get
},
path ("service-c) {
get,
post
}
}
您可以认为这是一个http代理服务。对于service-a
,只有get方法可用,对于service-c
,只有get和post。
在用户定义之后,我将在我的内部代码中使用此定义。
在我的内部沟通中,我为Request to Response
提供服务。基本上,响应逻辑是“
for {
services <- route
service <- services(httprequest.path)
availableMethods <- service
response <- httpresponse if availableMethods(httprequest.method)
} yield response
我如何通过免费monad实现这一目标?据我所知,我需要有两个interpreter
,一个用于用户(外部dsl),另一个用于内部dsl?
此解决方案的性能如何?在Akka Http中,路由只是来自ReqeustContext to result
的函数。如何使用免费monad实现?