Sure.  I was worried this would generate an ambiguous overload because you need two on ActionFunction:
```scala
def compose[Q[_]](other: ActionFunction[Q, R]): ActionFunction[Q, P]
def compose(other: ActionBuilder[R]): ActionBuilder[P]
```
But it seems to work fine.