I am trying to use various Scala implementations of C # -shaped return returns (ie this one ) with "for" - constructs such as:
private def permutations[T](s: Vector[T]) = { def swap(i: Int, j: Int) { val tmp = s(i) s.set(i, s.get(j)) s.set(j, tmp) } iterator[Vector[T]] { def generate(left: Int, right: Int): Unit @cps[Iteration[Vector[T]]] = { if (left >= right) yieldValue(s) else { generate(left, right) for (i <- left to right) { swap(left, i) generate(left+1, right) swap(left, i) } } } generate(0, s.size-1) } }
But this code compiles with an error:
error: no type parameters for method foreach: (f: (Int) => U)Unit exist so that it can be applied to arguments ((Int) => Unit @util.continuations.package.cps[ru.ispras.texterra.nlp.GHMMDisambiguator.Iteration[Vector[T]]]) --- because --- argument expression type is not compatible with formal parameter type; found : (Int) => Unit @util.continuations.package.cps[ru.ispras.texterra.nlp.GHMMDisambiguator.Iteration[Vector[T]]] required: (Int) => ?U for (i <- left to right) {
As I understand it, I have to do all the code inside to be of type () => Unit , not () => Unit @with-annotations . How can i do this?
This problem seems very common, but I did not find any references on the Internet.
sbos
source share