{-# LANGUAGE BangPatterns #-} {-# LANGUAGE DeriveDataTypeable #-} module Hcompta.Chart where import Data.Data (Data) import Data.Eq (Eq(..)) import Data.Functor (Functor(..)) -- import Data.List (concat) -- import Data.List.NonEmpty (NonEmpty(..)) import qualified Data.Map.Strict as Data.Map import Data.Monoid (Monoid(..)) import Data.Typeable (Typeable) import Text.Show (Show(..)) import Prelude (($)) -- import Hcompta.Account (Account) import qualified Hcompta.Account as Account import Hcompta.Lib.TreeMap (TreeMap) import qualified Hcompta.Lib.TreeMap as TreeMap -- import Hcompta.Tag (Tag) import qualified Hcompta.Tag as Tag data Chart = Chart { chart_accounts :: !(TreeMap Account.Account_Section Tag.Tags) -- , chart_tags :: !(TreeMap Tag.Section [Account]) } deriving (Data, Eq, Show, Typeable) instance Monoid Chart where mempty = Chart { chart_accounts = mempty -- , chart_tags = mempty } mappend x y = Chart { chart_accounts = chart_accounts x `mappend` chart_accounts y -- , chart_tags = chart_tags x `mappend` chart_tags y } -- | 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 $ TreeMap.find_along acct $ chart_accounts chart {- -- | Return the 'Account's associated with -- the given 'Tag' -- in the given 'Chart'. tag_accounts :: Tag -> Chart -> [Account] tag_accounts (p:|ps, value) chart = concat $ TreeMap.find_along (p:|ps `mappend` [value]) $ chart_tags chart -}