This is the first of several posts describing the evolution of scala.concurrent.Future
in Scala 2.12.x
.
Missing canonical combinators: flatten
Are you one of us Future-users who have grown tired of the old flatMap(identity)
boilerplate for un-nesting Future
s as in:
val future: Future[Future[X]] = ???
val flattenedFuture /*: Future[X] */ = future.flatMap(identity)
Then I have some great news for you!
Starting with Scala 2.12 scala.concurrent.Future
will have a flatten
-method with the following signature:
def flatten[S](implicit ev: T <:< Future[S]): Future[S]
Allowing you to write:
val future: Future[Future[X]] = ???
val flattenedFuture /*: Future[X] */ = future.flatten
Benefits:
- Less to type
- Less to read
- Does not require any
ExecutionContext
Bonus: Doesn’t allocate a function instance as flatMap(identity)
does:
scala> def sameInstance[T](first: T => T, second: T => T) = first eq second
sameInstance: [T](first: T => T, second: T => T)Boolean
scala> sameInstance[Int](identity, identity)
res0: Boolean = false
Click here for the next part in this blog series.
Cheers,
√