{-# LANGUAGE DeriveDataTypeable #-} module Hcompta.Chart where import Data.Data (Data) import Data.Eq (Eq(..)) import Data.Functor (Functor(..)) import qualified Data.Map.Strict as Data.Map import Data.Monoid (Monoid(..)) import Data.Typeable (Typeable) import Text.Show (Show(..)) import Prelude (($), (.)) import qualified Hcompta.Account as Account import qualified Hcompta.Lib.TreeMap as TreeMap import qualified Hcompta.Tag as Tag type Chart = Account.Account_Tree Chart_Account data Chart_Account = Chart_Account { chart_account_tags :: Tag.Tags } deriving (Data, Eq, Show, Typeable) instance Monoid Chart_Account where mempty = Chart_Account { chart_account_tags = mempty } mappend x0 x1 = Chart_Account { chart_account_tags = mappend (chart_account_tags x0) (chart_account_tags x1) } -- | Return the 'Tag.Tags' associated with -- the given 'Account.Account_Path' -- in the given 'Chart'. account_tags :: Account.Account_Path -> Chart -> Tag.Tags account_tags acct chart = Tag.Tags $ Data.Map.unionsWith mappend $ fmap (Tag.unTags . chart_account_tags) $ TreeMap.find_along acct chart