As far as I understand, `params`, `options.types` and `options.contexts` must have the same length since the options describe the param types and contexts. Since I'm shifting out `params`, I need to do the same for both `options.types` and `options.contexts` so that they stay in sync in subsequent calls.

I'm not using `linkContext` and I pondered whether it's better to just not assign it to a variable, but finally decided to leave it like this, for symmetry. It may be a better solution to just write `options.contexts.shift()` but I still need to do it.