<div dir="ltr"><div class="gmail_extra">I'd actually consider that "spine lazy" definition</div><div class="gmail_extra"><span style="font-family:arial,sans-serif;font-size:13px">instance Bits x => Bits [x] where</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">  xs .&. ys = zipWith (.&.) xs ys</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">  xs .|. ya = zipWith (.|.) xs ys</span><br></div><div class="gmail_extra"><span style="font-family:arial,sans-serif;font-size:13px"><br></span></div><div class="gmail_extra"><span style="font-family:arial,sans-serif;font-size:13px"><br></span></div><div class="gmail_extra"><span style="font-family:arial,sans-serif;font-size:13px">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).</span></div><div class="gmail_extra"><span style="font-family:arial,sans-serif;font-size:13px"><br></span></div><div class="gmail_extra"><span style="font-family:arial,sans-serif;font-size:13px">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 :) </span></div></div>