Реализация Seq [T] для CPS-классов - PullRequest
7 голосов
/ 19 апреля 2010

Имея следующий класс, который находится в CPS-контексте (@cps [Unit]), как мне реализовать Seq-trait? Должен ли я оставить в стороне стандартные черты, такие как Seq, и просто реализовать map, flatmap и foreach в контексте cps?

class DataFlowVariable[T] {
  def apply(): T @cps[Unit] = ...
}

class DataFlowStream[T] extends Seq[T] {

  override def iterator: Iterator[T] = new Iterator[T] {
    private val iter = queue.iterator
    def hasNext: Boolean = iter.hasNext
    def next: T = { // needed: next: T @cps[Unit] !
      val dfvar = iter.next
      // dfvar() // not possible as dvar.apply has type "T @cps[Unit]"
    }
  }
}

1 Ответ

1 голос
/ 13 мая 2010

ОК, насколько я понимаю, реализация интерфейсов / черт типа Seq невозможна. Однако, поскольку Scala переписывает синтаксические сахарные циклы for в обычные вызовы foreach / map-вызовы, он прекрасно работает, просто реализуя map и foreach с необходимой аннотацией cps. filter & co также должен работать.

Однако, любой совет о том, как реализовать черты в cps-контексте, очень важен.

...