在下面的陈述中,Intellij抱怨aSub
(第一个红色波浪形):
type mismatch: expected: Nothing, actual: Any
以及其他一些编译器潦草的红线:
IO类型定义如下:
sealed trait IO[A] {
def flatMap[B](f: A => IO[B]): IO[B] =
FlatMap(this, f) // we do not interpret the `flatMap` here, just return it as a value
def map[B](f: A => B): IO[B] =
flatMap(f andThen (Return(_)))
}
case class Return[A](a: A) extends IO[A]
case class Suspend[A](resume: () => A) extends IO[A]
case class FlatMap[A,B](sub: IO[A], k: A => IO[B]) extends IO[B]
有趣的是,SBT中的Scala编译器在运行时不会抱怨这些类型(sbt compile
)。
我知道Intellij还没有赶上scalac
的能力,所以我希望:
是否有明确的类型我可以将变量提供给"帮助" Intellij与推理?
根据@Doc的建议,我使用类型参数重构了代码,但仍然遇到以下情况: