scala - 如何包装有效的 F 而不是具体的类型构造函数?
问题描述
我有以下函数定义:
private val checkSapHealth: IO[ServerHealth] =
BlazeClientBuilder[IO](global).resource.use { client =>
discovery
.senderAddr
.flatMap { addr =>
client
.get(addr.url |+| addr.health) { res =>
res.status match {
case Ok =>
IO(ServerOnline)
case _ =>
IO(ServerOffline)
}
}
.timeout(2.second)
.recover {
case _: Throwable => ServerOffline
}
}
}
我想通过替换具体类型IO
以F[_]
使其更抽象。这里的问题是:
IO(ServerOnline)
问题是如何做到
F(ServerOnline)
解决方案
尝试使用cats.effect.Sync
https://typelevel.org/cats-effect/typeclasses/sync.html
所以基本上 using
Sync[IO].delay
等价于 usingIO.apply
。
private def checkSapHealth[F[_]: Sync]: F[ServerHealth] = ...
推荐阅读
- php - Twitter登录oauth api不断重定向我以授权应用程序
- python - 在 Pandas / Python 中合并数据框中的列值
- c - 位运算符如何在 avr atmega 寄存器中工作?
- java - Apache Ignite 2.7.0 在 GridFutureAdapter.get0() 中花费了大量时间
- html - 如何更改 div 类“col-sm-9”的宽度和高度大小?
- node.js - 如何使 socket.io 在所有路由中都可以访问
- python-3.x - 我应该在哪里修改我的树遍历代码以避免未知信号 11 错误?
- symfony4 - 如何在 flashbag 中显示文件异常(try/catch)?
- reactjs - reactstrap 和 Chrome 自动填充将密码放入电子邮件输入中
- amazon-web-services - AWS MSK Kafka 不支持 Ubuntu 客户端 awscli?