对于以下假设函数(在scala中),函数式编程中适当的返回类型是什么?
def execute(req: HttpRequest): <UnknownResultType>
我会假设IO[Future[Response]]
,因为我们既有网络副作用,也有异步性。
因为这可能有点麻烦(monad包裹在monad中,即使使用monad变换器),FP中有更好的抽象来处理它吗?
答案 0 :(得分:1)
正如@Travis Brown所说,在Scala中返回纯异步计算的最常用的方法是使用scalaz.concurrent.Task
,你可以在scalaz-concurrent
库中找到它。
使用Task
,您的功能将如下所示:
def execute(req: HttpRequest): Task[Response]
execute
是一个纯函数:在调用Task.run
或类似方法之前不会产生任何副作用。
有关Task
的详细介绍,请参阅this great article。