Scala嵌套的case语句不能推断类型并给出编译器错误

时间:2016-08-05 01:21:51

标签: scala intellij-idea

在下面的陈述中,Intellij抱怨aSub(第一个红色波浪形):

type mismatch: expected: Nothing, actual: Any

以及其他一些编译器潦草的红线:

enter image description here

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的建议,我使用类型参数重构了代码,但仍然遇到以下情况:

enter image description here

0 个答案:

没有答案