This should work

I dove into some magic but it starts getting into serious "I really want dependent types" craziness and that's an impulse you just have to resist the majority of time in Haskell.

The safer way to go would be to simply enumerate all the combinations of types with proxy types for the mana inhabitants or something similar.

The solution I've hammered out is designed to avoid necessitating that but still only allowing the computation of card mana cost values that are kosher.

Let me know if you want to discuss further.