2010-04-19 11 views
7

Con la siguiente clase que se encuentra en un contexto CPS (@cps [Unidad]) ¿cómo implementaría Seq-trait? ¿Debo dejar los rasgos estándar como Seq a un lado y simplemente implementar map, flatmap y foreach en el contexto cps?Implementando Seq [T] para CPS-Classes

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]" 
    } 
    } 
} 
+0

¿Mi pregunta es demasiado críptica? Para resumir: como todas las funciones que trabajan en un contexto CPS necesitan devolver un tipo anotado con cps [X], no puedo implementar ningún Rasgos/Interfaces estándar como Seq porque su firma carece de estas anotaciones @ cps. ¿Es esto correcto? – hotzen

Respuesta

1

OK, por lo que tengo parece implementación de interfaces/rasgos como Seq no es posible. Sin embargo, como Scala reescribe los for syntactic-sugar-loops en llamadas foreach/map ordinarias, funciona genial simplemente implementar map y foreach con la anotación cps requerida. filtro & co debería funcionar también.

Sin embargo, cualquier consejo sobre cómo implementar rasgos en un contexto cps es muy apreciado.

Cuestiones relacionadas