is this future map scala syntax good? I'm new to scala and have been working to understand the syntax so that I can be more efficient.  How does this look in terms of functional syntax and scala idioms?

In particular, I'd like to know if this is a good way of handling futures.  I'm aware of onComplete, onSuccess, etc..., matching but I had trouble getting a return value back out.  map seemed like the right approach here.

object Application extends Controller with securesocial.core.SecureSocial {

  val inboxSlurper = Akka.system.actorOf(Props[InboxSlurper], name = "inboxSlurper")

  def index = SecuredAction.async {
    implicit request =&gt;
      implicit val timeout = Timeout(10 seconds)
      val user: User = request.user.asInstanceOf[User]

      val f = inboxSlurper.ask(
        OauthIdentity(
          user.email.get,
          user.oAuth2Info.get.accessToken))

      f flatMap { reply =&gt;
        val emailFeed = reply.asInstanceOf[Enumerator[Message]]
        val iter = Iteratee.fold[Message, String]("")((result, msg) =&gt; result + msg.getSubject())
        emailFeed |&gt;&gt;&gt; iter
      } map { str =&gt;
        Logger.debug(str);
        val subj = "Subject: %s".format(str)
        Ok(views.html.index(subj))
      }

  }

}
Future "callbacks" can be simplified by using the for comprehension to compose futures. More information can be found here http://docs.scala-lang.org/overviews/core/futures.html#functional_composition_and_forcomprehensions

I'm not a Scala expert, but this is how i would replace the flatMap and map with a for

object Application extends Controller with securesocial.core.SecureSocial {

  val inboxSlurper = Akka.system.actorOf(Props[InboxSlurper], name = "inboxSlurper")

  def index = SecuredAction.async { implicit request =&gt;
    implicit val timeout = Timeout(10 seconds)
    val user = request.user.asInstanceOf[User]

    for {
      emailFeed &lt;- (inboxSlurper ? OauthIdentity(user.email.get, user.oAuth2Info.get.accessToken))).mapTo[Enumerator[Message]]
      str &lt;- emailFeed |&gt;&gt;&gt; Iteratee.fold[Message, String]("")((result, msg) =&gt; result + msg.getSubject())
    } yield Ok(views.html.index("Subject: %s".format(str)))
  }

}


The example demonstrates the sequential composition of futures, str will be calculated when emailFeed has retrieved the data for the inboxSlurper actor. After all futures have been completed then a result can be returned with yield.

Because everything is a expression in Scala for {} yield Ok() will be returned as result for the Action, which is a Future[SimpleResult].