This code gives compilation error:
import scala.util.continuations._
object CTest {
def loop: Nothing = reset {
shift {c: (Unit => Nothing) => c()}
loop
}
def main(argv: Array[String]) {loop}
}
Error message:
error: type mismatch;
found : ((Unit) => Nothing) => (Unit) => Nothing
required: ((Unit) => B) => (Unit) => Nothing
But this code works as expected:
import scala.util.continuations._
object CTest {
def loop: Nothing = reset {
shift {c: (Unit => Any) => c.asInstanceOf[Unit => Nothing]()}
loop
}
def main(argv: Array[String]) {loop}
}
The question is: why Scala compiler hates me continuations of type Any => Nothing?
It compiles if I specify the type arguments:
shift[Unit, Nothing, Nothing] {c: (Unit => Nothing) => c()}
It looks to me like the compiler should infer that B
is Nothing
, but it doesn't.