]> Git — Sourcephile - comptalang.git/blob - lib/Hcompta/Chart.hs
Ajout : Hcompta.Chart.
[comptalang.git] / lib / Hcompta / Chart.hs
1 {-# LANGUAGE DeriveDataTypeable #-}
2 module Hcompta.Chart where
3
4 import Data.Data (Data)
5 import Data.Eq (Eq(..))
6 import Data.Functor (Functor(..))
7 import qualified Data.Map.Strict as Data.Map
8 import Data.Monoid (Monoid(..))
9 import Data.Typeable (Typeable)
10 import Text.Show (Show(..))
11 import Prelude (($), (.))
12
13 import qualified Hcompta.Account as Account
14 import qualified Hcompta.Lib.TreeMap as TreeMap
15 import qualified Hcompta.Tag as Tag
16
17 type Chart = Account.Account_Tree Chart_Account
18
19 data Chart_Account
20 = Chart_Account
21 { chart_account_tags :: Tag.Tags
22 }
23 deriving (Data, Eq, Show, Typeable)
24
25 instance Monoid Chart_Account where
26 mempty =
27 Chart_Account
28 { chart_account_tags = mempty
29 }
30 mappend x0 x1 =
31 Chart_Account
32 { chart_account_tags =
33 mappend
34 (chart_account_tags x0)
35 (chart_account_tags x1)
36 }
37
38 -- | Return the 'Tag.Tags' associated with
39 -- the given 'Account.Account_Path'
40 -- in the given 'Chart'.
41 account_tags :: Account.Account_Path -> Chart -> Tag.Tags
42 account_tags acct chart =
43 Tag.Tags $ Data.Map.unionsWith mappend $
44 fmap (Tag.unTags . chart_account_tags) $
45 TreeMap.find_along acct chart