IntelliJ显示有关依赖方法类型的类型不匹配错误,即使sbt编译良好(scala)

IntelliJ显示有关依赖方法类型的类型不匹配错误,即使sbt编译良好(scala),scala,intellij-idea,dependent-method-type,Scala,Intellij Idea,Dependent Method Type,我有如下特点: trait NumberRepository[C <: AppContext] { def findAll(implicit ctx: C): ctx.Result[Seq[Int]] def findEvens(implicit ctx: C): ctx.Result[Seq[Int]] = findAll.map(_.filter(_ % 2 == 0)) } trait AppContext { type Result[+A] <: AppResu

我有如下特点:

trait NumberRepository[C <: AppContext] {
  def findAll(implicit ctx: C): ctx.Result[Seq[Int]]
  def findEvens(implicit ctx: C): ctx.Result[Seq[Int]] = findAll.map(_.filter(_ % 2 == 0))
}
trait AppContext {
  type Result[+A] <: AppResult[Result, A]
  def success[A](a: A): Result[A]
}

trait AppResult[F[+_], +A] {
  def map[B](f: A => B): F[B]
  def flatMap[B](f: A => F[B]): F[B]
}

class AppContextImpl extends AppContext {
  type Result[+A] = AppResultImpl[A]
  override def success[A](a: A): AppResultImpl[A] = AppResultImpl(Some(a))
}

case class AppResultImpl[+A](value: Option[A]) extends AppResult[AppResultImpl, A] {
  override def map[B](f: A => B): AppResultImpl[B] = AppResultImpl(value.map(f))
  override def flatMap[B](f: A => AppResultImpl[B]): AppResultImpl[B] = value match {
    case Some(a) => f(a)
    case None => AppResultImpl(None)
  }
}

class NumberRepositoryImpl extends NumberRepository[AppContextImpl] {
  override def findAll(implicit ctx: AppContextImpl): AppResultImpl[Seq[Int]] = ctx.success(1 to 10)
}
我发现我可以通过显式地将'ctx'参数传递给findAll来解决这个问题。但出于某些原因,我不想这么做

// it's OK!
def findEvens(implicit ctx: C): ctx.Result[Seq[Int]] = findAll(ctx).map(_.filter(_ % 2 == 0))
是虫子吗?或者我的代码或配置有问题?有没有办法修复这个错误

AppContext如下所示:

trait NumberRepository[C <: AppContext] {
  def findAll(implicit ctx: C): ctx.Result[Seq[Int]]
  def findEvens(implicit ctx: C): ctx.Result[Seq[Int]] = findAll.map(_.filter(_ % 2 == 0))
}
trait AppContext {
  type Result[+A] <: AppResult[Result, A]
  def success[A](a: A): Result[A]
}

trait AppResult[F[+_], +A] {
  def map[B](f: A => B): F[B]
  def flatMap[B](f: A => F[B]): F[B]
}

class AppContextImpl extends AppContext {
  type Result[+A] = AppResultImpl[A]
  override def success[A](a: A): AppResultImpl[A] = AppResultImpl(Some(a))
}

case class AppResultImpl[+A](value: Option[A]) extends AppResult[AppResultImpl, A] {
  override def map[B](f: A => B): AppResultImpl[B] = AppResultImpl(value.map(f))
  override def flatMap[B](f: A => AppResultImpl[B]): AppResultImpl[B] = value match {
    case Some(a) => f(a)
    case None => AppResultImpl(None)
  }
}

class NumberRepositoryImpl extends NumberRepository[AppContextImpl] {
  override def findAll(implicit ctx: AppContextImpl): AppResultImpl[Seq[Int]] = ctx.success(1 to 10)
}
trait-AppContext{
键入结果[+A]B):F[B]
def平面地图[B](f:A=>f[B]):f[B]
}
类AppContextImpl扩展了AppContext{
类型结果[+A]=AppResultImpl[A]
覆盖def成功[A](A:A):AppResultImpl[A]=AppResultImpl(部分(A))
}
案例类AppResultImpl[+A](值:选项[A])扩展AppResult[AppResultImpl,A]{
覆盖def-map[B](f:A=>B):AppResultImpl[B]=AppResultImpl(value.map(f))
覆盖def flatMap[B](f:A=>AppResultImpl[B]):AppResultImpl[B]=值匹配{
案例部分(a)=>f(a)
案例无=>AppResultImpl(无)
}
}
类NumberRepositoryImpl扩展了NumberRepository[AppContextImpl]{
覆盖def findAll(隐式ctx:AppContextImpl):AppResultImpl[Seq[Int]]=ctx.success(1到10)
}
是一种独立于Scala编译器本身的IntelliJ功能,因此有时它的行为可能会有所不同。可能会报告错误

为了帮助我们修复突出显示故障,您可以向YouTrack报告 与往常一样,或按Alt+Enter键选择错误的突出显示:

还可以通过右下角的小
T
图标禁用/启用类型识别突出显示


或者,尝试获取错误诊断,该诊断应该是100%真实的,但功能可能不那么强大。

我禁用了突出显示,错误消失了,谢谢!我还向JetBrains报告了这个问题: