Note that the central method here is:

```scala
def invokeBlock[A](request: R[A], block: P[A] => Future[SimpleResult]): Future[SimpleResult]
```

The contract says it must return `Future[SimpleResult]`, and as part of that, it may coerce `R[A]` to `P[A]` then call `block`, but that's optional.

Translator captures the coercion, but not the potential invocation of `block`.  Perhaps `ActionInvoker` would be good, considering the method on it is called `invokeBlock`.