在 Http4S

问题描述

浏览我看到的文档:

多个HttpRoutes可以与combineK方法(或其别名)结合使用

tweetService <+> helloWorldService

不知道结果如何?即使用CombineK 与Kleisli 合并?

https://typelevel.org/cats/typeclasses/semigroupk.html

我很难想象它的作用。

有人可以帮助理解这一点吗?

附注: 我看到我可以只使用路由器(它结合了下面的东西)而不用担心,但希望能有指针来了解正在发生的事情。

更新 1

只需在 Cats 中仔细检查 SemigroupK 中的 Klseisli

ealed private[data] trait KleisliSemigroupK[F[_],A] extends SemigroupK[Kleisli[F,A,*]] {
  implicit def F: SemigroupK[F]

  override def combineK[B](x: Kleisli[F,B],y: Kleisli[F,B]): Kleisli[F,B] =
    Kleisli(a => F.combineK(x.run(a),y.run(a)))

  override def combineKEval[B](x: Kleisli[F,y: Eval[Kleisli[F,B]]): Eval[Kleisli[F,B]] =
    Eval.now(Kleisli(a => F.combineKEval(x.run(a),y.map(_.run(a))).value))
}

知道我们的路由返回 OptionT[F,Response[F]] 或 F[Option[Response[F]]],我仍然很难弄清楚目的是什么。

更新 2

检查 Cats IO 后

protected class IOSemigroupK extends SemigroupK[IO] {
    final override def combineK[A](a: IO[A],b: IO[A]): IO[A] =
      a.handleErrorWith(_ => b)
  }

我怀疑这意味着,尝试每条路线,直到成功。

并且路由器将确保:

服务可以按任意顺序挂载,因为请求将首先与最长的基本路径匹配。

到目前为止感觉差不多。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...