Lennart Augustsson gave a nice example of how to define enums without having to maintain the forward as well as reverse transformations here [1]. Applying that to your problem:
And then you can use the code I gave in the previous reply to generate the Serialize instance. I suppose this is better looking, but you may want to check the efficiency since it requires a lookup (but it's a super tiny table so it might not be all that bad). You can generate similar code with Template Haskell, eliding the lookup.