I know that when rustc has to go find a method, it really wants to know what the type is without ambiguity. And since there are multiple possibilities for which Shl implementation is at play (different {integer} types), it bails in this case when it needs to know which to_u64_digits to call.
But I don't actually know the answer to your question, i.e., why it doesn't try to unify all the possible output types. I could make some wild guesses, but that's all they'd be.
You can also do this:
let big = big_b << 64u8; // or whichever {integer}
As it will be able to figure out which implementation it is and thus the type of big.