首页 > 解决方案 > Scala、cats、http4s - 无法识别来自 Http4s 的 <+> 符号

问题描述

我创建了两条Http4s路线:

class FirstRoutes[F[_] : Async](service: FirstService[F]) extends Http4sDsl[F] {        
  def routes: HttpRoutes[F] = HttpRoutes.of[F] {
        //... some code
  }
}   

class SecondRoutes[F[_] : Async] extends Http4sDsl[F] {            
    def routes: HttpRoutes[F] = HttpRoutes.of[F] {
    //... some code
    }
}

现在在我的main方法中,我想这样称呼这条路线:

override def run(args: List[String]): IO[ExitCode] =
    for {
      _ <- {
        val app = {
          //...
          val firstRoutes = new FirstRoutes[F](someService)
          val secondRoutes = new SecondRoutes[F]
          (firstRoutes.routes <+> secondRoutes.routes).orNotFound
        }

但是当我编译这段代码时,我得到了一个错误:

Error:(26, 33) value <+> is not a member of org.http4s.HttpRoutes[Server.F]
          (firstRoutes.routes <+> secondRoutes.routes).orNotFound

这对我来说很奇怪,因为<+>当我在路由类上使用 ctrl+space 时我通常可以使用这个符号,而且我有很好的导入:

import cats.effect._
import cats.data._
import org.http4s.server.blaze.BlazeServerBuilder
import cats.effect._
import cats.implicits._

无法找到如何解决此问题并用于<+>调用路由类。也许是intellij问题?有人能帮我吗?

标签: scalascala-catshttp4s

解决方案


为 build.sbt 添加这个 scala 选项

scalacOptions += "-Ypartial-unification"

推荐阅读