@@ -23,8 +23,9 @@ import Data.FastMutableIntMap
23import Data.IORef
23import Data.IORef
24import Data.Map (Map)
24import Data.Map (Map)
25import qualified Data.Map.Strict as Map
25import qualified Data.Map.Strict as Map
26−import Data.Monoid
26+import Data.Monoid ((<>))
27import Data.Ord
27import Data.Ord
28+import qualified Data.Semigroup as S
28import Data.Type.Coercion
29import Data.Type.Coercion
29import Foreign.Ptr
30import Foreign.Ptr
30import GHC.Foreign
31import GHC.Foreign
@@ -50,9 +51,13 @@ data CostCentreTree = CostCentreTree
51 deriving (Show, Eq, Ord)
52 deriving (Show, Eq, Ord)
54+instance S.Semigroup CostCentreTree where
55+ (CostCentreTree oa ea ca) <> (CostCentreTree ob eb cb) =
56+ CostCentreTree (oa + ob) (ea + eb) $ Map.unionWith (S.<>) ca cb
53instance Monoid CostCentreTree where
58instance Monoid CostCentreTree where
54 mempty = CostCentreTree 0 0 mempty
59 mempty = CostCentreTree 0 0 mempty
55− CostCentreTree oa ea ca `mappend` CostCentreTree ob eb cb = CostCentreTree (oa + ob) (ea + eb) $ Map.unionWith (<>) ca cb
60+ mappend = (S.<>)
57getCostCentreStack :: Ptr CostCentreStack -> IO [Ptr CostCentre]
62getCostCentreStack :: Ptr CostCentreStack -> IO [Ptr CostCentre]
58getCostCentreStack = go []
63getCostCentreStack = go []