-
Notifications
You must be signed in to change notification settings - Fork 29
Open
Description
Currently, for
comprehension is considered a way to transform keywords.
For example, the following code are equivalent.
def fetchURL(url: Uri): Future[ByteString] = ???
def fetchScalaWebsite(uriListFuture: Future[List[Uri]]): Future[List[ByteString]] = {
(for {
uriList <- Await(uriListFuture)
uri <- Each(uriList)
content <- Await(fetchURL(uri))
} yield content).to[Future[List[ByteString]]]
}
// Dsl.scala 2.x
def fetchScalaWebsite(uriListFuture: Future[List[Uri]]): Future[List[ByteString]] = reset[Future[List[ByteString]]] {
val uriList: List[Uri] = !Await(uriListFuture)
val uri: Uri = !Each(uriList)
val content: ByteString = !Await(fetchURL(uri))
!Return(content)
}
// Dsl.scala 1.x
def fetchScalaWebsite(uriListFuture: Future[List[Uri]]): Future[List[ByteString]] = {
val uriList: List[Uri] = !Await(uriListFuture)
val uri: Uri = !Each(uriList)
val content: ByteString = !Await(fetchURL(uri))
!Return(content)
} : @reset
However, we cannot mix together comprehension and !-notation:
// Dsl.scala 2.x
def fetchScalaWebsite(uriListFuture: Future[List[Uri]]): Future[List[ByteString]] = reset[Future[List[ByteString]]] {
val uriList: List[Uri] = !Await(uriListFuture)
val contentList: List[ByteString] =
for (uri <- Each(uriList)) yield {
!Await(fetchURL(uri))
}
!Return(contentList)
}
Do we want to change the comprehension design to support the above use case?
Metadata
Metadata
Assignees
Labels
No labels