> This can be written as:

That doesn't work exactly because blocks do weird stuff, it gives some errors because the compiler can't infer the right type. I could probably get it to work by casting stuff around, but I'm afraid to step on ARC's toes by doing that so I opted for the ugly but obvious solution.

> How about synchronizing on the `RACCompoundDisposable` we create instead?

We need to synchronize on the same object in all the recursive calls to this method, so it has to be one of the objects that get passed recursively.

I could always pass a synchronization token along explicitly by adding another argument, should I do that?