1 {-# LANGUAGE DeriveDataTypeable #-}
2 module Hcompta.Chart where
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 (($), (.))
13 import qualified Hcompta.Account as Account
14 import qualified Hcompta.Lib.TreeMap as TreeMap
15 import qualified Hcompta.Tag as Tag
17 type Chart = Account.Account_Tree Chart_Account
21 { chart_account_tags :: Tag.Tags
23 deriving (Data, Eq, Show, Typeable)
25 instance Monoid Chart_Account where
28 { chart_account_tags = mempty
32 { chart_account_tags =
34 (chart_account_tags x0)
35 (chart_account_tags x1)
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