首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scala,cat,http4s -不识别Http4s中的<+>符号

Scala,cat,http4s -不识别Http4s中的<+>符号
EN

Stack Overflow用户
提问于 2019-04-25 21:07:50
回答 2查看 1.7K关注 0票数 5

我创建了两条Http4s路由:

代码语言:javascript
复制
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方法中,我想这样调用这个路由:

代码语言:javascript
复制
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
        }

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

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

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

代码语言:javascript
复制
import cats.effect._
import cats.data._
import org.http4s.server.blaze.BlazeServerBuilder
import cats.effect._
import cats.implicits._

无法找到如何修复此问题,并使用<+>调用路由类。也许是intellij的问题?有人能帮我吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-25 21:24:31

也许你该看看http://eed3si9n.com/herding-cats/import-guide.html

https://blog.softwaremill.com/9-tips-about-using-cats-in-scala-you-might-want-to-know-e1bafd365f88 忠告2)

<+>来自cats.syntax.semigroupk._

下面的代码编译

代码语言:javascript
复制
import cats.effect.{Async, ExitCode, IO}
import cats.syntax.semigroupk._
import org.http4s.HttpRoutes
import org.http4s.dsl.Http4sDsl
import org.http4s.syntax.kleisli._
import scala.language.higherKinds

class App {

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

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

  trait FirstService[F[_]]

  /*override*/ def run[F[_]: Async](args: List[String]): IO[ExitCode] = {
    val someService: FirstService[F] = ???
    for {
      _ <- {
        val app = {
          //...
          val firstRoutes = new FirstRoutes[F](someService)
          val secondRoutes = new SecondRoutes[F]
          (firstRoutes.routes <+> secondRoutes.routes).orNotFound
        }
        IO(???)
      }
    } yield ExitCode(1)
  }
}
票数 3
EN

Stack Overflow用户

发布于 2019-12-07 05:15:06

为build.sbt添加这个scala选项

代码语言:javascript
复制
scalacOptions += "-Ypartial-unification"
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55857659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档