lib: Add Bifunctor instances for PeriodicReport and PeriodicReportRow.
This commit is contained in:
parent
7597e525a3
commit
1116846881
@ -32,6 +32,7 @@ module Hledger.Reports.ReportTypes
|
|||||||
) where
|
) where
|
||||||
|
|
||||||
import Data.Aeson (ToJSON(..))
|
import Data.Aeson (ToJSON(..))
|
||||||
|
import Data.Bifunctor (Bifunctor(..))
|
||||||
import Data.Decimal (Decimal)
|
import Data.Decimal (Decimal)
|
||||||
import Data.Maybe (mapMaybe)
|
import Data.Maybe (mapMaybe)
|
||||||
import Data.Text (Text)
|
import Data.Text (Text)
|
||||||
@ -86,6 +87,9 @@ data PeriodicReport a b =
|
|||||||
, prTotals :: PeriodicReportRow () b -- The grand totals row.
|
, prTotals :: PeriodicReportRow () b -- The grand totals row.
|
||||||
} deriving (Show, Functor, Generic, ToJSON)
|
} deriving (Show, Functor, Generic, ToJSON)
|
||||||
|
|
||||||
|
instance Bifunctor PeriodicReport where
|
||||||
|
bimap f g pr = pr{prRows = map (bimap f g) $ prRows pr, prTotals = fmap g $ prTotals pr}
|
||||||
|
|
||||||
data PeriodicReportRow a b =
|
data PeriodicReportRow a b =
|
||||||
PeriodicReportRow
|
PeriodicReportRow
|
||||||
{ prrName :: a -- An account name.
|
{ prrName :: a -- An account name.
|
||||||
@ -94,6 +98,10 @@ data PeriodicReportRow a b =
|
|||||||
, prrAverage :: b -- The average of this row's values.
|
, prrAverage :: b -- The average of this row's values.
|
||||||
} deriving (Show, Functor, Generic, ToJSON)
|
} deriving (Show, Functor, Generic, ToJSON)
|
||||||
|
|
||||||
|
instance Bifunctor PeriodicReportRow where
|
||||||
|
first f prr = prr{prrName = f $ prrName prr}
|
||||||
|
second = fmap
|
||||||
|
|
||||||
instance Semigroup b => Semigroup (PeriodicReportRow a b) where
|
instance Semigroup b => Semigroup (PeriodicReportRow a b) where
|
||||||
(PeriodicReportRow _ amts1 t1 a1) <> (PeriodicReportRow n2 amts2 t2 a2) =
|
(PeriodicReportRow _ amts1 t1 a1) <> (PeriodicReportRow n2 amts2 t2 a2) =
|
||||||
PeriodicReportRow n2 (sumPadded amts1 amts2) (t1 <> t2) (a1 <> a2)
|
PeriodicReportRow n2 (sumPadded amts1 amts2) (t1 <> t2) (a1 <> a2)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user