I think you are restricting the type of failed for no reason.

`Results.Status` type has an `apply` method that can be costly.

What’s wrong with making `failed` a thunk?

```scala
def apply[A](p: => Boolean, failed: => Result)(action: Action[A]): Action[A]
```