适合异步 http 请求的 return 类型? IO[未来[响应]]还是未来[响应]?或者其他选择?
Appropriate return type for an async http request? IO[Future[Response]] or Future[Response]? Or some alternative?
对于以下假设函数(在 scala 中),在函数式编程中什么是合适的 return 类型?
def execute(req: HttpRequest): <UnknownResultType>
我假设 IO[Future[Response]]
,因为我们同时具有网络副作用和异步性。
因为这可能有点麻烦(一个 monad 包裹在一个 monad 中,即使有 monad 转换器),FP 中是否有更好的抽象来处理这个问题?
正如@Travis Brown 所说,在 Scala 中 return 纯异步计算的最惯用方法是使用 scalaz.concurrent.Task
,您可以在 scalaz-concurrent
库中找到它。
使用 Task
您的函数将如下所示:
def execute(req: HttpRequest): Task[Response]
execute
是一个纯函数:在您调用 Task.run
或类似方法之前不会发生任何副作用。
有关 Task
的详细介绍,请参阅 this great article。
对于以下假设函数(在 scala 中),在函数式编程中什么是合适的 return 类型?
def execute(req: HttpRequest): <UnknownResultType>
我假设 IO[Future[Response]]
,因为我们同时具有网络副作用和异步性。
因为这可能有点麻烦(一个 monad 包裹在一个 monad 中,即使有 monad 转换器),FP 中是否有更好的抽象来处理这个问题?
正如@Travis Brown 所说,在 Scala 中 return 纯异步计算的最惯用方法是使用 scalaz.concurrent.Task
,您可以在 scalaz-concurrent
库中找到它。
使用 Task
您的函数将如下所示:
def execute(req: HttpRequest): Task[Response]
execute
是一个纯函数:在您调用 Task.run
或类似方法之前不会发生任何副作用。
有关 Task
的详细介绍,请参阅 this great article。