scala implicit scala-2.10 scala-2.9 for-comprehension

scala - ¿Hay una manera de declarar un valor implícito dentro de una comprensión?



implicit scala-2.10 (2)

¿Qué tal este código?

// prerequisites val (a,b) = (List(1,2,3), List(3,4,5,7,9)) def tree(n: Int)(implicit s: Int) = " "*s + "0"*n + (if (s+3 < n) "*" else "") // actual for @volatile implicit var s = 0 for (i <- a if ({s = i; true}); j <- b) println(tree(j)) // 000 // 0000 // 00000* // 0000000* // 000000000* // 000 // 0000 // 00000 // 0000000* // 000000000* // 000 // 0000 // 00000 // 0000000* // 000000000*

Tengo un código con llamadas anidadas a flatMap así:

foo.flatMap(implicit f => bar(123).flatMap(b => /* and so on... implicit f is still in scope here.*/ ))

Normalmente, uno escribiría eso como una comprensión, lo que hace que el código sea mucho más legible:

for { f <- foo b <- bar(123) /* yet more method calls that need f as an implicit parameter*/ }

Pero necesito que f esté implícito y no veo una manera de hacerlo para comprenderlo. ¿Esta ahí? Por supuesto, podría aprobar f explícitamente, pero eso significaría, adiós, bastante DSL. Me interesarían las respuestas para Scala 2.9 y 2.10.

Para que quede claro, me gustaría hacer algo como esto, pero no se compilará:

for { implicit f <- foo b <- bar(123) //bar takes implicit argument /* yet more method calls that need f as an implicit parameter*/ }

EDIT: ¿ Tal vez una solicitud de función sería una buena idea?

EDIT2: Esto debería funcionar con todos los tipos que se pueden usar en una comprensión, así que no solo con los tipos de colección habituales como List o Seq , sino también con Future .