mirror of
https://github.com/simonmichael/hledger.git
synced 2024-11-08 07:09:28 +03:00
44 lines
1.1 KiB
Haskell
44 lines
1.1 KiB
Haskell
|
|
module BasicTypes
|
|
where
|
|
import Utils
|
|
|
|
|
|
type Date = String
|
|
type Status = Bool
|
|
|
|
-- amounts
|
|
-- amount arithmetic currently ignores currency conversion
|
|
|
|
data Amount = Amount {
|
|
currency :: String,
|
|
quantity :: Double
|
|
} deriving (Eq,Ord)
|
|
|
|
instance Num Amount where
|
|
abs (Amount c q) = Amount c (abs q)
|
|
signum (Amount c q) = Amount c (signum q)
|
|
fromInteger i = Amount "$" (fromInteger i)
|
|
(+) = amountAdd
|
|
(-) = amountSub
|
|
(*) = amountMult
|
|
Amount ca qa `amountAdd` Amount cb qb = Amount ca (qa + qb)
|
|
Amount ca qa `amountSub` Amount cb qb = Amount ca (qa - qb)
|
|
Amount ca qa `amountMult` Amount cb qb = Amount ca (qa * qb)
|
|
|
|
instance Show Amount where show = amountRoundedOrZero
|
|
|
|
amountRoundedOrZero :: Amount -> String
|
|
amountRoundedOrZero (Amount cur qty) =
|
|
let rounded = printf "%.2f" qty in
|
|
case rounded of
|
|
"0.00" -> "0"
|
|
"-0.00" -> "0"
|
|
otherwise -> cur ++ rounded
|
|
|
|
-- generic tree. each node is a tuple of the node type and a
|
|
-- list of subtrees
|
|
newtype Tree a = Tree { node :: (a, [Tree a]) } deriving (Show,Eq)
|
|
branches = snd . node
|
|
|