2010-04-19 5 views
7

Avec la classe suivante qui se trouve dans un contexte CPS (@cps [Unité]) comment implémenter le trait Seq? Dois-je laisser de côté les traits standard comme Seq et implémenter map, flatmap et foreach dans le contexte cps?Implémentation de Seq [T] pour les classes 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

Ma question est-elle trop cryptique? En résumé: Comme toutes les fonctions fonctionnant dans un contexte CPS doivent retourner un type annoté avec cps [X], je ne suis pas capable d'implémenter des Traits/Interfaces standards comme Seq parce que leur signature n'a pas ces @ cps-annotations. Est-ce correct? – hotzen

Répondre

1

OK, pour autant que je l'ai semble mettre en œuvre des interfaces/traits comme Seq est impossible. Cependant, lorsque Scala réécrit les for boucles de sucre syntactique en appels foreach/map ordinaires, il suffit de mettre en œuvre map et foreach avec l'annotation cps requise. filtre & co devrait fonctionner aussi bien.

Cependant, tout conseil sur la façon de mettre en œuvre des traits dans un contexte cps est grandement apprécié.

Questions connexes