Ah, I see: with call the return function, being passed in, can only be used in a context expecting a single type, while to is polymorphic so using within lets you return from different types.