Наличие следующего класса, который находится в контексте 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]"
}
}
}
Хорошо, насколько я понял, реализация интерфейсов / свойств вроде Seq
невозможна.
Однако, поскольку Scala переписывает для
синтаксических сахарных циклов в обычные вызовы foreach / map, отлично работает простая реализация map
и foreach
с необходимой cps-аннотацией.
filter & co тоже должны работать.
Тем не менее, мы очень ценим любые советы о том, как реализовать трейты в cps-контексте.