异步http请求的适当返回类型? IO [未来[响应]]或未来[响应]?或者另一种选择?

时间:2015-04-03 13:59:00

标签: scala functional-programming monads future scalaz

对于以下假设函数(在scala中),函数式编程中适当的返回类型是什么?

def execute(req: HttpRequest): <UnknownResultType>

我会假设IO[Future[Response]],因为我们既有网络副作用,也有异步性。

因为这可能有点麻烦(monad包裹在monad中,即使使用monad变换器),FP中有更好的抽象来处理它吗?

1 个答案:

答案 0 :(得分:1)

正如@Travis Brown所说,在Scala中返回纯异步计算的最常用的方法是使用scalaz.concurrent.Task,你可以在scalaz-concurrent库中找到它。

使用Task,您的功能将如下所示:

def execute(req: HttpRequest): Task[Response]

execute是一个纯函数:在调用Task.run或类似方法之前不会产生任何副作用。

有关Task的详细介绍,请参阅this great article