I'd actually consider that "spine lazy" definition
instance Bits x => Bits [x] where xs .&. ys = zipWith (.&.) xs ys xs .|. ya = zipWith (.|.) xs ys
to be the proper "short circuiting" definition, because it has the minimal work complexity and just a nice lifted version of the pointwise boolean / bitwise operation. the "is this all True/1s" lifted version doesnt seem to provide a good work complexity bound (seems all or nothing).
Otoh, my stance might be a bit heretical or subtley wrong :), NB that I do undersand that unlike the "batch" short circuit, this one would fail if the right hand side was "undefined / error", but thats ok :)