Uniform is an extension for the Play Framework that makes it possible to write multi-page journeys using for comprehensions -
val journey = for {
customerAddress <- ask(addressBinding, "customerAddress")
billingAddress <- ask(addressBinding, "billingAddress")
creditCardDetails <- ask(ccBinding, "creditCardDetails")
pay = PaymentDetails(customerAddress, billingAddress, creditCardDetails)
_ <- confirm(pay) >>= takePayment(pay)
} yield ()