> I prefer the Decimal library for currency.

here is another option to consider:

data Cur = Eur | ...
data Money = Mint Cur Int | Mtup Cur (Int,Int)

precision::Cur -> Int
precision Eur = 2
precision _ = 2

€ 10.02 would be:
Mint Eur 1002
Mtup Eur (10,2)

This adds overhead to computations. However precision and correct currency is guaranteed.