This is somewhat of a nitpick, but for one thing, writing code that is as obviously correct as possible is important in every language, not just in Haskell. Compositionality is one of the most valuable things we can exploit when programming.
For another thing , the assertion that enumerating all the cases for a given function instead of using a lookup makes the code more obviously correct is somewhat flawed - it violates DRY, which is, like exploitation of compositionality, important in programming in general. Suppose the showPiece function had twice the number of cases. Would enumerating the cases individually or making the assertion that the code is more obviously correct as a result be reasonable?
In my view, you are solving the same problem whether you use a lookup or enumerate the cases individually, and it's not even a very big problem - just put your tokens in the right order.
For another thing , the assertion that enumerating all the cases for a given function instead of using a lookup makes the code more obviously correct is somewhat flawed - it violates DRY, which is, like exploitation of compositionality, important in programming in general. Suppose the showPiece function had twice the number of cases. Would enumerating the cases individually or making the assertion that the code is more obviously correct as a result be reasonable?
In my view, you are solving the same problem whether you use a lookup or enumerate the cases individually, and it's not even a very big problem - just put your tokens in the right order.