public async Task <IActionResult> CreateOrder(Order order) { var expr = from createOrder in RestaurantDomain.CreateAndPersistOrder(order) let orderE = (createOrder as OrderCreated)?.OrderAgg.Order select createOrder; var result = await interpreter.Interpret(expr, Unit.Default); return(await result.MatchAsync <IActionResult>( async created => { return (IActionResult)Ok(created.OrderAgg.Order); }, async badReq => { return BadRequest(); } , async notCreated => { return BadRequest(); } )); }