2010-04-19 9 views
7

Avendo la seguente classe che si trova in un contesto CPS (@cps [Unità]) come implementare il Seq-trait? Devo lasciare i tratti standard come Seq a parte e solo implementare map, flatmap e foreach nel cps-context?Implementazione del Seq [T] per le classi 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]" 
    } 
    } 
} 
+0

La mia domanda è troppo criptica? Per riassumere: poiché tutte le funzioni che funzionano in un contesto CPS devono restituire un tipo annotato con cps [X], non sono in grado di implementare alcun tratto/interfaccia standard come Seq perché la loro firma manca di queste annotazioni @ cps. È corretto? – hotzen

risposta

1

OK, per quanto ho capito sembra interfacce attuazione/tratti come Seq non è possibile. Tuttavia, quando Scala riscrive i loop sintattici dello for in normali chiamate foreach/map-call, funziona alla grande semplicemente implementando map e foreach con l'annotazione cps richiesta. filtro & co dovrebbe funzionare pure.

Tuttavia, qualsiasi consiglio su come implementare i tratti in un contesto cps è molto apprezzato.

Problemi correlati