For extra fun, notice that you can make declarations like: data (Unit u) => Kilo u = Kilo u instance (Unit u) => Unit (Kilo u) where shortName (Kilo u) = "k" ++ shortName u which behaves in ghci like: *Main> UnitValue (Kilo Meter) 30 30km - Cale