Реализация Seq[T] для классов CPS

Наличие следующего класса, который находится в контексте CPS (@cps [Единица]), как я реализовал бы Seq-черту? Я должен оставить стандартные черты как Seq в стороне и просто реализовать карту, flatmap и foreach в контексте симв./с?

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]"
    }
  }
}
7
задан hotzen 19 April 2010 в 13:27
поделиться

1 ответ

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

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

1
ответ дан 7 December 2019 в 20:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: