Cats Effect 3.5添加sleep时缺失Applicative隐式值的问题
问题解决:Cats Effect + Http4s 隐式缺失报错
核心原因
你不需要自定义Applicative或Monad,Cats Effect的type class是层级继承的:Temporal[F] 已经包含了 Async[F]、Sync[F]、Monad[F]、Applicative[F] 所有上层能力。报错是因为隐式导入不全,或冗余的类型约束干扰了编译器推导。
解决方案步骤
- 精简类型约束:只保留
Temporal[F]即可,无需同时声明Sync(Temporal是Sync的子类型,自动继承其能力) - 补充必要隐式导入:确保导入
cats.implicits._和cats.effect._,让编译器能自动推导所有所需的type class实例 - 简化Response写法:用Http4s DSL提供的
Ok替代手动构建Response,代码更简洁
修正后的代码
import cats.effect.{Temporal, _} import cats.implicits._ import org.http4s._ import org.http4s.dsl.Http4sDsl class Routes[F[_]: Temporal] extends Http4sDsl[F] { val routes: HttpRoutes[F] = HttpRoutes.of { case (HEAD | GET) -> Root / "health" => for { _ <- Temporal[F].sleep(5.seconds) resp <- Ok.pure[F] } yield resp } }
额外说明
- 如果你使用的是自定义的
Http4sDslExt,只需确保它继承自标准的Http4sDsl,隐式导入规则不变 Ok.pure[F]可以进一步简化为Applicative[F].pure(Ok),但在导入cats.implicits._后,pure[F]的隐式参数会自动被推导
内容的提问来源于stack exchange,提问作者Terry BRUNIER
相关产品推荐
相关产品推荐

