import Data.Fixed
import Text.Printf

type Percent = Centi
type Dollars = Centi

tax :: Percent -> Dollars -> Dollars
tax rate = MkFixed . round . (rate *)

printAmount :: String -> Dollars -> IO ()
printAmount name = printf "%-10s%20s\n" name . showFixed False

main :: IO ()
main = do
  let subtotal = 4000000000000000 * 5.50 + 2 * 2.86
      tx       = tax 7.65 subtotal
      total    = subtotal + tx
  printAmount "Subtotal" subtotal
  printAmount "Tax"      tx
  printAmount "Total"    total