问题描述
浏览我看到的文档:
多个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 (将#修改为@)