Brandon, I think you're articulating a very good point here, in noting that the current set of instances for Bits that *are*
strict are precisely so because their underlying representations are
spine strict!
From that perspective, it is definitely valid to argue that the shortcircuiting behavior of bool is in fact correct.
Its also important to keep in mind that theres many examples where the branchless version of bool is not a win,
and we've not yet articulated an example where someone will be writing code that is both generic AND branchless (indeed, I'm not certain if there is actually a meaningful performance win in the fully polymorphic case when its the desired semantics).
Additionally, one entire space left unaddressed here is this: "why cant we formulate an optimization algorithm to add to ghc that tries to estimate when transformation into a (relatively) branchless formulation of the same code"?
a style i've grown to favor is the following: make it easy to write generic code thats always correct (wrt complexity), and make it sane to do specialization/optimization by hand later (and/or teach the compiler.)
I guess my point here is this: while i've many examples of code i've written that has benefited from being rewritten in a branch free form, that is because of bad branch prediction rather than branching itself. Branchless code is immune to that problem, but if you dont have bad branch prediction, the branching code will be faster / simpler than the branch free code.