@@ -23,8 +23,9 @@ import Data.FastMutableIntMap
2323import Data.IORef
2424import Data.Map (Map)
2525import qualified Data.Map.Strict as Map
26−import Data.Monoid
26+import Data.Monoid ((<>))
2727import Data.Ord
28+import qualified Data.Semigroup as S
2829import Data.Type.Coercion
2930import Foreign.Ptr
3031import GHC.Foreign
@@ -50,9 +51,13 @@ data CostCentreTree = CostCentreTree
5051 }
5152 deriving (Show, Eq, Ord)
5253
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
57+
5358instance Monoid CostCentreTree where
5459 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.<>)
5661
5762getCostCentreStack :: Ptr CostCentreStack -> IO [Ptr CostCentre]
5863getCostCentreStack = go []