The problem is compose() now extracts the first function's body. If the body UseMethod(), the value is returned immediately (right?). So, when we add a non-generic function (e.g. identity()) at the end, it works.
Can this line simply be reverted to out <- first_fn(...)?:
@yutannihilation Good diagnostic. The goal was to have the same formals list as the original function, so we can have auto-completion of arguments etc. If I can't make it working with generic functions, I'll revert that feature.