I might have over simplified the problem by using ReaderT in my example. In my original problem this role is played by the Pipes library (and instead of using 'ask', I wanted to 'yield' control to a downstream pipe).
Is there a way you could introduce just enough complexity to allow Oleg another stab?
Also, there's always the fallback of showing your Pipes-based code although that library doesn't enjoy universal familiarity.