---------------------------------------------------------
--
-- Module : BasicType
-- Copyright : Bartosz Wójcik (2010)
-- License : BSD3
--
-- Maintainer : bartek@sudety.it
-- Stability : Unstable
-- Portability : portable
--
-- Basic types of Haskell Loan.
---------------------------------------------------------
{-# LANGUAGE TypeSynonymInstances #-}
module Haslo.BasicType
where
import Text.PrettyShow
-- | Each amount has its own fix precision. Usually two digits after decimal point, sometimes
-- even till full hundrest or thousends. Therefore all amounts are stored as Ints. This prevents
-- situation where rounded amounts don't sum up to given value. Alternatilvely @Int@ would be
-- suitable.
type Amount = Integer
-- | Interest calculated. Interest paid is of @Amount@ data type.
type Interest = Double
-- | Interest rate.
type Rate = Double
-- | Duration of the loan.
type Duration = Int
-- | Operations on @Amount@s have to be rounded to full amount.
data RoundingType = Rounded
| Truncated
deriving (Eq, Ord, Show, Enum)
instance PrettyShow RoundingType where
showWithLen n = showWithLen n . show