{-# LANGUAGE FlexibleContexts #-}
module Ouroboros.Consensus.Ledger.Tables.Utils
(
ltprj
, ltwith
, emptyLedgerTables
, forgetLedgerTables
, applyDiffForKeys
, applyDiffForKeysOnTables
, applyDiffs
, calculateDifference
, noNewTickingDiffs
, valuesAsDiffs
, prependDiffs
, rawPrependDiffs
, attachAndApplyDiffs
, attachEmptyDiffs
, prependTrackingDiffs
, trackingToDiffs
, rawTrackingDiffs
, trackingToValues
, unionValues
, applyDiffsMK
, restrictValuesMK
, applyDiffs'
, rawAttachAndApplyDiffs
, rawCalculateDifference
) where
import qualified Data.Map.Strict as Map
import Ouroboros.Consensus.Ledger.Tables
import qualified Ouroboros.Consensus.Ledger.Tables.Diff as Diff
ltwith ::
( HasLedgerTables l blk
, CanMapMK mk'
, CanMapKeysMK mk'
, ZeroableMK mk'
) =>
l blk mk ->
LedgerTables blk mk' ->
l blk mk'
ltwith :: forall (l :: StateKind) blk (mk' :: MapKind) (mk :: MapKind).
(HasLedgerTables l blk, CanMapMK mk', CanMapKeysMK mk',
ZeroableMK mk') =>
l blk mk -> LedgerTables blk mk' -> l blk mk'
ltwith = l blk mk -> LedgerTables blk mk' -> l blk mk'
forall (mk :: MapKind) (any :: MapKind).
(CanMapMK mk, CanMapKeysMK mk, ZeroableMK mk) =>
l blk any -> LedgerTables blk mk -> l blk mk
forall (l :: StateKind) blk (mk :: MapKind) (any :: MapKind).
(HasLedgerTables l blk, CanMapMK mk, CanMapKeysMK mk,
ZeroableMK mk) =>
l blk any -> LedgerTables blk mk -> l blk mk
withLedgerTables
ltprj ::
(HasLedgerTables l blk, CanMapMK mk, CanMapKeysMK mk, ZeroableMK mk) =>
l blk mk ->
LedgerTables blk mk
ltprj :: forall (l :: StateKind) blk (mk :: MapKind).
(HasLedgerTables l blk, CanMapMK mk, CanMapKeysMK mk,
ZeroableMK mk) =>
l blk mk -> LedgerTables blk mk
ltprj = l blk mk -> LedgerTables blk mk
forall (mk :: MapKind).
(CanMapMK mk, CanMapKeysMK mk, ZeroableMK mk) =>
l blk mk -> LedgerTables blk mk
forall (l :: StateKind) blk (mk :: MapKind).
(HasLedgerTables l blk, CanMapMK mk, CanMapKeysMK mk,
ZeroableMK mk) =>
l blk mk -> LedgerTables blk mk
projectLedgerTables
noNewTickingDiffs ::
HasLedgerTables l blk =>
l blk any ->
l blk DiffMK
noNewTickingDiffs :: forall (l :: StateKind) blk (any :: MapKind).
HasLedgerTables l blk =>
l blk any -> l blk DiffMK
noNewTickingDiffs l blk any
l = l blk any -> LedgerTables blk DiffMK -> l blk DiffMK
forall (mk :: MapKind) (any :: MapKind).
(CanMapMK mk, CanMapKeysMK mk, ZeroableMK mk) =>
l blk any -> LedgerTables blk mk -> l blk mk
forall (l :: StateKind) blk (mk :: MapKind) (any :: MapKind).
(HasLedgerTables l blk, CanMapMK mk, CanMapKeysMK mk,
ZeroableMK mk) =>
l blk any -> LedgerTables blk mk -> l blk mk
withLedgerTables l blk any
l LedgerTables blk DiffMK
forall (mk :: MapKind) blk.
(ZeroableMK mk, LedgerTableConstraints blk) =>
LedgerTables blk mk
emptyLedgerTables
forgetLedgerTables :: HasLedgerTables l blk => l blk mk -> l blk EmptyMK
forgetLedgerTables :: forall (l :: StateKind) blk (mk :: MapKind).
HasLedgerTables l blk =>
l blk mk -> l blk EmptyMK
forgetLedgerTables l blk mk
l = l blk mk -> LedgerTables blk EmptyMK -> l blk EmptyMK
forall (mk :: MapKind) (any :: MapKind).
(CanMapMK mk, CanMapKeysMK mk, ZeroableMK mk) =>
l blk any -> LedgerTables blk mk -> l blk mk
forall (l :: StateKind) blk (mk :: MapKind) (any :: MapKind).
(HasLedgerTables l blk, CanMapMK mk, CanMapKeysMK mk,
ZeroableMK mk) =>
l blk any -> LedgerTables blk mk -> l blk mk
withLedgerTables l blk mk
l LedgerTables blk EmptyMK
forall (mk :: MapKind) blk.
(ZeroableMK mk, LedgerTableConstraints blk) =>
LedgerTables blk mk
emptyLedgerTables
emptyLedgerTables :: (ZeroableMK mk, LedgerTableConstraints blk) => LedgerTables blk mk
emptyLedgerTables :: forall (mk :: MapKind) blk.
(ZeroableMK mk, LedgerTableConstraints blk) =>
LedgerTables blk mk
emptyLedgerTables = (forall k v. LedgerTableConstraints' blk k v => mk k v)
-> LedgerTables blk mk
forall l (mk :: MapKind).
LedgerTableConstraints l =>
(forall k v. LedgerTableConstraints' blk k v => mk k v)
-> LedgerTables l mk
ltpure mk k v
forall k v. (Ord k, Eq v) => mk k v
forall k v. LedgerTableConstraints' blk k v => mk k v
forall (mk :: MapKind) k v. (ZeroableMK mk, Ord k, Eq v) => mk k v
emptyMK
rawTrackingDiffs :: TrackingMK k v -> DiffMK k v
rawTrackingDiffs :: forall k v. TrackingMK k v -> DiffMK k v
rawTrackingDiffs (TrackingMK Map k v
_vs Diff k v
d) = Diff k v -> DiffMK k v
forall k v. Diff k v -> DiffMK k v
DiffMK Diff k v
d
trackingToDiffs :: HasLedgerTables l blk => l blk TrackingMK -> l blk DiffMK
trackingToDiffs :: forall (l :: StateKind) blk.
HasLedgerTables l blk =>
l blk TrackingMK -> l blk DiffMK
trackingToDiffs l blk TrackingMK
l = l blk TrackingMK -> LedgerTables blk DiffMK -> l blk DiffMK
forall (l :: StateKind) blk (mk' :: MapKind) (mk :: MapKind).
(HasLedgerTables l blk, CanMapMK mk', CanMapKeysMK mk',
ZeroableMK mk') =>
l blk mk -> LedgerTables blk mk' -> l blk mk'
ltwith l blk TrackingMK
l (LedgerTables blk DiffMK -> l blk DiffMK)
-> LedgerTables blk DiffMK -> l blk DiffMK
forall a b. (a -> b) -> a -> b
$ (forall k v.
LedgerTableConstraints' blk k v =>
TrackingMK k v -> DiffMK k v)
-> LedgerTables blk TrackingMK -> LedgerTables blk DiffMK
forall l (mk1 :: MapKind) (mk2 :: MapKind).
LedgerTableConstraints l =>
(forall k v. LedgerTableConstraints' blk k v => mk1 k v -> mk2 k v)
-> LedgerTables l mk1 -> LedgerTables l mk2
ltmap TrackingMK k v -> DiffMK k v
forall k v.
LedgerTableConstraints' blk k v =>
TrackingMK k v -> DiffMK k v
forall k v. TrackingMK k v -> DiffMK k v
rawTrackingDiffs (l blk TrackingMK -> LedgerTables blk TrackingMK
forall (l :: StateKind) blk (mk :: MapKind).
(HasLedgerTables l blk, CanMapMK mk, CanMapKeysMK mk,
ZeroableMK mk) =>
l blk mk -> LedgerTables blk mk
ltprj l blk TrackingMK
l)
rawTrackingValues :: TrackingMK k v -> ValuesMK k v
rawTrackingValues :: forall k v. TrackingMK k v -> ValuesMK k v
rawTrackingValues (TrackingMK Map k v
vs Diff k v
_ds) = Map k v -> ValuesMK k v
forall k v. Map k v -> ValuesMK k v
ValuesMK Map k v
vs
trackingToValues :: HasLedgerTables l blk => l blk TrackingMK -> l blk ValuesMK
trackingToValues :: forall (l :: StateKind) blk.
HasLedgerTables l blk =>
l blk TrackingMK -> l blk ValuesMK
trackingToValues l blk TrackingMK
l = l blk TrackingMK -> LedgerTables blk ValuesMK -> l blk ValuesMK
forall (l :: StateKind) blk (mk' :: MapKind) (mk :: MapKind).
(HasLedgerTables l blk, CanMapMK mk', CanMapKeysMK mk',
ZeroableMK mk') =>
l blk mk -> LedgerTables blk mk' -> l blk mk'
ltwith l blk TrackingMK
l (LedgerTables blk ValuesMK -> l blk ValuesMK)
-> LedgerTables blk ValuesMK -> l blk ValuesMK
forall a b. (a -> b) -> a -> b
$ (forall k v.
LedgerTableConstraints' blk k v =>
TrackingMK k v -> ValuesMK k v)
-> LedgerTables blk TrackingMK -> LedgerTables blk ValuesMK
forall l (mk1 :: MapKind) (mk2 :: MapKind).
LedgerTableConstraints l =>
(forall k v. LedgerTableConstraints' blk k v => mk1 k v -> mk2 k v)
-> LedgerTables l mk1 -> LedgerTables l mk2
ltmap TrackingMK k v -> ValuesMK k v
forall k v.
LedgerTableConstraints' blk k v =>
TrackingMK k v -> ValuesMK k v
forall k v. TrackingMK k v -> ValuesMK k v
rawTrackingValues (l blk TrackingMK -> LedgerTables blk TrackingMK
forall (l :: StateKind) blk (mk :: MapKind).
(HasLedgerTables l blk, CanMapMK mk, CanMapKeysMK mk,
ZeroableMK mk) =>
l blk mk -> LedgerTables blk mk
ltprj l blk TrackingMK
l)
rawPrependDiffs ::
Ord k =>
DiffMK k v ->
DiffMK k v ->
DiffMK k v
rawPrependDiffs :: forall k v. Ord k => DiffMK k v -> DiffMK k v -> DiffMK k v
rawPrependDiffs (DiffMK Diff k v
d1) (DiffMK Diff k v
d2) = Diff k v -> DiffMK k v
forall k v. Diff k v -> DiffMK k v
DiffMK (Diff k v
d1 Diff k v -> Diff k v -> Diff k v
forall a. Semigroup a => a -> a -> a
<> Diff k v
d2)
prependDiffs' ::
( HasLedgerTables l blk
, HasLedgerTables l' blk
) =>
l blk DiffMK -> l' blk DiffMK -> LedgerTables blk DiffMK
prependDiffs' :: forall (l :: StateKind) blk (l' :: StateKind).
(HasLedgerTables l blk, HasLedgerTables l' blk) =>
l blk DiffMK -> l' blk DiffMK -> LedgerTables blk DiffMK
prependDiffs' l blk DiffMK
l1 l' blk DiffMK
l2 = (forall k v.
LedgerTableConstraints' blk k v =>
DiffMK k v -> DiffMK k v -> DiffMK k v)
-> LedgerTables blk DiffMK
-> LedgerTables blk DiffMK
-> LedgerTables blk DiffMK
forall l (mk1 :: MapKind) (mk2 :: MapKind) (mk3 :: MapKind).
LedgerTableConstraints l =>
(forall k v.
LedgerTableConstraints' blk k v =>
mk1 k v -> mk2 k v -> mk3 k v)
-> LedgerTables l mk1 -> LedgerTables l mk2 -> LedgerTables l mk3
ltliftA2 DiffMK k v -> DiffMK k v -> DiffMK k v
forall k v. Ord k => DiffMK k v -> DiffMK k v -> DiffMK k v
forall k v.
LedgerTableConstraints' blk k v =>
DiffMK k v -> DiffMK k v -> DiffMK k v
rawPrependDiffs (l blk DiffMK -> LedgerTables blk DiffMK
forall (l :: StateKind) blk (mk :: MapKind).
(HasLedgerTables l blk, CanMapMK mk, CanMapKeysMK mk,
ZeroableMK mk) =>
l blk mk -> LedgerTables blk mk
ltprj l blk DiffMK
l1) (l' blk DiffMK -> LedgerTables blk DiffMK
forall (l :: StateKind) blk (mk :: MapKind).
(HasLedgerTables l blk, CanMapMK mk, CanMapKeysMK mk,
ZeroableMK mk) =>
l blk mk -> LedgerTables blk mk
ltprj l' blk DiffMK
l2)
prependDiffs ::
(HasLedgerTables l blk, HasLedgerTables l' blk) =>
l blk DiffMK -> l' blk DiffMK -> l' blk DiffMK
prependDiffs :: forall (l :: StateKind) blk (l' :: StateKind).
(HasLedgerTables l blk, HasLedgerTables l' blk) =>
l blk DiffMK -> l' blk DiffMK -> l' blk DiffMK
prependDiffs l blk DiffMK
l1 l' blk DiffMK
l2 = l' blk DiffMK -> LedgerTables blk DiffMK -> l' blk DiffMK
forall (l :: StateKind) blk (mk' :: MapKind) (mk :: MapKind).
(HasLedgerTables l blk, CanMapMK mk', CanMapKeysMK mk',
ZeroableMK mk') =>
l blk mk -> LedgerTables blk mk' -> l blk mk'
ltwith l' blk DiffMK
l2 (LedgerTables blk DiffMK -> l' blk DiffMK)
-> LedgerTables blk DiffMK -> l' blk DiffMK
forall a b. (a -> b) -> a -> b
$ l blk DiffMK -> l' blk DiffMK -> LedgerTables blk DiffMK
forall (l :: StateKind) blk (l' :: StateKind).
(HasLedgerTables l blk, HasLedgerTables l' blk) =>
l blk DiffMK -> l' blk DiffMK -> LedgerTables blk DiffMK
prependDiffs' l blk DiffMK
l1 l' blk DiffMK
l2
applyDiffsMK ::
Ord k =>
ValuesMK k v ->
DiffMK k v ->
ValuesMK k v
applyDiffsMK :: forall k v. Ord k => ValuesMK k v -> DiffMK k v -> ValuesMK k v
applyDiffsMK (ValuesMK Map k v
vals) (DiffMK Diff k v
diffs) = Map k v -> ValuesMK k v
forall k v. Map k v -> ValuesMK k v
ValuesMK (Map k v -> Diff k v -> Map k v
forall k v. Ord k => Map k v -> Diff k v -> Map k v
Diff.applyDiff Map k v
vals Diff k v
diffs)
applyDiffs' ::
( HasLedgerTables l blk
, HasLedgerTables l' blk
) =>
l blk ValuesMK -> l' blk DiffMK -> LedgerTables blk ValuesMK
applyDiffs' :: forall (l :: StateKind) blk (l' :: StateKind).
(HasLedgerTables l blk, HasLedgerTables l' blk) =>
l blk ValuesMK -> l' blk DiffMK -> LedgerTables blk ValuesMK
applyDiffs' l blk ValuesMK
l1 l' blk DiffMK
l2 = (forall k v.
LedgerTableConstraints' blk k v =>
ValuesMK k v -> DiffMK k v -> ValuesMK k v)
-> LedgerTables blk ValuesMK
-> LedgerTables blk DiffMK
-> LedgerTables blk ValuesMK
forall l (mk1 :: MapKind) (mk2 :: MapKind) (mk3 :: MapKind).
LedgerTableConstraints l =>
(forall k v.
LedgerTableConstraints' blk k v =>
mk1 k v -> mk2 k v -> mk3 k v)
-> LedgerTables l mk1 -> LedgerTables l mk2 -> LedgerTables l mk3
ltliftA2 ValuesMK k v -> DiffMK k v -> ValuesMK k v
forall k v. Ord k => ValuesMK k v -> DiffMK k v -> ValuesMK k v
forall k v.
LedgerTableConstraints' blk k v =>
ValuesMK k v -> DiffMK k v -> ValuesMK k v
applyDiffsMK (l blk ValuesMK -> LedgerTables blk ValuesMK
forall (l :: StateKind) blk (mk :: MapKind).
(HasLedgerTables l blk, CanMapMK mk, CanMapKeysMK mk,
ZeroableMK mk) =>
l blk mk -> LedgerTables blk mk
ltprj l blk ValuesMK
l1) (l' blk DiffMK -> LedgerTables blk DiffMK
forall (l :: StateKind) blk (mk :: MapKind).
(HasLedgerTables l blk, CanMapMK mk, CanMapKeysMK mk,
ZeroableMK mk) =>
l blk mk -> LedgerTables blk mk
ltprj l' blk DiffMK
l2)
applyDiffs ::
(HasLedgerTables l blk, HasLedgerTables l' blk) =>
l blk ValuesMK -> l' blk DiffMK -> l' blk ValuesMK
applyDiffs :: forall (l :: StateKind) blk (l' :: StateKind).
(HasLedgerTables l blk, HasLedgerTables l' blk) =>
l blk ValuesMK -> l' blk DiffMK -> l' blk ValuesMK
applyDiffs l blk ValuesMK
l1 l' blk DiffMK
l2 = l' blk DiffMK -> LedgerTables blk ValuesMK -> l' blk ValuesMK
forall (l :: StateKind) blk (mk' :: MapKind) (mk :: MapKind).
(HasLedgerTables l blk, CanMapMK mk', CanMapKeysMK mk',
ZeroableMK mk') =>
l blk mk -> LedgerTables blk mk' -> l blk mk'
ltwith l' blk DiffMK
l2 (LedgerTables blk ValuesMK -> l' blk ValuesMK)
-> LedgerTables blk ValuesMK -> l' blk ValuesMK
forall a b. (a -> b) -> a -> b
$ l blk ValuesMK -> l' blk DiffMK -> LedgerTables blk ValuesMK
forall (l :: StateKind) blk (l' :: StateKind).
(HasLedgerTables l blk, HasLedgerTables l' blk) =>
l blk ValuesMK -> l' blk DiffMK -> LedgerTables blk ValuesMK
applyDiffs' l blk ValuesMK
l1 l' blk DiffMK
l2
rawApplyDiffForKeys ::
Ord k =>
ValuesMK k v ->
KeysMK k v ->
DiffMK k v ->
ValuesMK k v
rawApplyDiffForKeys :: forall k v.
Ord k =>
ValuesMK k v -> KeysMK k v -> DiffMK k v -> ValuesMK k v
rawApplyDiffForKeys (ValuesMK Map k v
vals) (KeysMK Set k
keys) (DiffMK Diff k v
diffs) =
Map k v -> ValuesMK k v
forall k v. Map k v -> ValuesMK k v
ValuesMK (Map k v -> Set k -> Diff k v -> Map k v
forall k v. Ord k => Map k v -> Set k -> Diff k v -> Map k v
Diff.applyDiffForKeys Map k v
vals Set k
keys Diff k v
diffs)
applyDiffForKeys ::
(HasLedgerTables l blk, HasLedgerTables l' blk) =>
l blk ValuesMK -> LedgerTables blk KeysMK -> l' blk DiffMK -> l' blk ValuesMK
applyDiffForKeys :: forall (l :: StateKind) blk (l' :: StateKind).
(HasLedgerTables l blk, HasLedgerTables l' blk) =>
l blk ValuesMK
-> LedgerTables blk KeysMK -> l' blk DiffMK -> l' blk ValuesMK
applyDiffForKeys l blk ValuesMK
l1 LedgerTables blk KeysMK
l2 l' blk DiffMK
l3 = l' blk DiffMK -> LedgerTables blk ValuesMK -> l' blk ValuesMK
forall (l :: StateKind) blk (mk' :: MapKind) (mk :: MapKind).
(HasLedgerTables l blk, CanMapMK mk', CanMapKeysMK mk',
ZeroableMK mk') =>
l blk mk -> LedgerTables blk mk' -> l blk mk'
ltwith l' blk DiffMK
l3 (LedgerTables blk ValuesMK -> l' blk ValuesMK)
-> LedgerTables blk ValuesMK -> l' blk ValuesMK
forall a b. (a -> b) -> a -> b
$ LedgerTables blk ValuesMK
-> LedgerTables blk KeysMK
-> l' blk DiffMK
-> LedgerTables blk ValuesMK
forall (l :: StateKind) blk.
HasLedgerTables l blk =>
LedgerTables blk ValuesMK
-> LedgerTables blk KeysMK
-> l blk DiffMK
-> LedgerTables blk ValuesMK
applyDiffForKeys' (l blk ValuesMK -> LedgerTables blk ValuesMK
forall (l :: StateKind) blk (mk :: MapKind).
(HasLedgerTables l blk, CanMapMK mk, CanMapKeysMK mk,
ZeroableMK mk) =>
l blk mk -> LedgerTables blk mk
ltprj l blk ValuesMK
l1) LedgerTables blk KeysMK
l2 l' blk DiffMK
l3
applyDiffForKeys' ::
HasLedgerTables l blk =>
LedgerTables blk ValuesMK -> LedgerTables blk KeysMK -> l blk DiffMK -> LedgerTables blk ValuesMK
applyDiffForKeys' :: forall (l :: StateKind) blk.
HasLedgerTables l blk =>
LedgerTables blk ValuesMK
-> LedgerTables blk KeysMK
-> l blk DiffMK
-> LedgerTables blk ValuesMK
applyDiffForKeys' LedgerTables blk ValuesMK
l1 LedgerTables blk KeysMK
l2 l blk DiffMK
l3 = (forall k v.
LedgerTableConstraints' blk k v =>
ValuesMK k v -> KeysMK k v -> DiffMK k v -> ValuesMK k v)
-> LedgerTables blk ValuesMK
-> LedgerTables blk KeysMK
-> LedgerTables blk DiffMK
-> LedgerTables blk ValuesMK
forall l (mk1 :: MapKind) (mk2 :: MapKind) (mk3 :: MapKind)
(mk4 :: MapKind).
LedgerTableConstraints l =>
(forall k v.
LedgerTableConstraints' blk k v =>
mk1 k v -> mk2 k v -> mk3 k v -> mk4 k v)
-> LedgerTables l mk1
-> LedgerTables l mk2
-> LedgerTables l mk3
-> LedgerTables l mk4
ltliftA3 ValuesMK k v -> KeysMK k v -> DiffMK k v -> ValuesMK k v
forall k v.
Ord k =>
ValuesMK k v -> KeysMK k v -> DiffMK k v -> ValuesMK k v
forall k v.
LedgerTableConstraints' blk k v =>
ValuesMK k v -> KeysMK k v -> DiffMK k v -> ValuesMK k v
rawApplyDiffForKeys LedgerTables blk ValuesMK
l1 LedgerTables blk KeysMK
l2 (l blk DiffMK -> LedgerTables blk DiffMK
forall (l :: StateKind) blk (mk :: MapKind).
(HasLedgerTables l blk, CanMapMK mk, CanMapKeysMK mk,
ZeroableMK mk) =>
l blk mk -> LedgerTables blk mk
ltprj l blk DiffMK
l3)
applyDiffForKeysOnTables ::
HasLedgerTables l blk =>
LedgerTables blk ValuesMK -> LedgerTables blk KeysMK -> l blk DiffMK -> l blk ValuesMK
applyDiffForKeysOnTables :: forall (l :: StateKind) blk.
HasLedgerTables l blk =>
LedgerTables blk ValuesMK
-> LedgerTables blk KeysMK -> l blk DiffMK -> l blk ValuesMK
applyDiffForKeysOnTables LedgerTables blk ValuesMK
l1 LedgerTables blk KeysMK
l2 l blk DiffMK
l3 = l blk DiffMK -> LedgerTables blk ValuesMK -> l blk ValuesMK
forall (l :: StateKind) blk (mk' :: MapKind) (mk :: MapKind).
(HasLedgerTables l blk, CanMapMK mk', CanMapKeysMK mk',
ZeroableMK mk') =>
l blk mk -> LedgerTables blk mk' -> l blk mk'
ltwith l blk DiffMK
l3 (LedgerTables blk ValuesMK -> l blk ValuesMK)
-> LedgerTables blk ValuesMK -> l blk ValuesMK
forall a b. (a -> b) -> a -> b
$ LedgerTables blk ValuesMK
-> LedgerTables blk KeysMK
-> l blk DiffMK
-> LedgerTables blk ValuesMK
forall (l :: StateKind) blk.
HasLedgerTables l blk =>
LedgerTables blk ValuesMK
-> LedgerTables blk KeysMK
-> l blk DiffMK
-> LedgerTables blk ValuesMK
applyDiffForKeys' LedgerTables blk ValuesMK
l1 LedgerTables blk KeysMK
l2 l blk DiffMK
l3
rawCalculateDifference ::
(Ord k, Eq v) =>
ValuesMK k v ->
ValuesMK k v ->
TrackingMK k v
rawCalculateDifference :: forall k v.
(Ord k, Eq v) =>
ValuesMK k v -> ValuesMK k v -> TrackingMK k v
rawCalculateDifference (ValuesMK Map k v
before) (ValuesMK Map k v
after) = Map k v -> Diff k v -> TrackingMK k v
forall k v. Map k v -> Diff k v -> TrackingMK k v
TrackingMK Map k v
after (Map k v -> Map k v -> Diff k v
forall k v. (Ord k, Eq v) => Map k v -> Map k v -> Diff k v
Diff.diff Map k v
before Map k v
after)
valuesAsDiffs :: HasLedgerTables l blk => l blk ValuesMK -> l blk DiffMK
valuesAsDiffs :: forall (l :: StateKind) blk.
HasLedgerTables l blk =>
l blk ValuesMK -> l blk DiffMK
valuesAsDiffs l blk ValuesMK
l = l blk TrackingMK -> l blk DiffMK
forall (l :: StateKind) blk.
HasLedgerTables l blk =>
l blk TrackingMK -> l blk DiffMK
trackingToDiffs (l blk TrackingMK -> l blk DiffMK)
-> l blk TrackingMK -> l blk DiffMK
forall a b. (a -> b) -> a -> b
$ l blk ValuesMK -> LedgerTables blk TrackingMK -> l blk TrackingMK
forall (l :: StateKind) blk (mk' :: MapKind) (mk :: MapKind).
(HasLedgerTables l blk, CanMapMK mk', CanMapKeysMK mk',
ZeroableMK mk') =>
l blk mk -> LedgerTables blk mk' -> l blk mk'
ltwith l blk ValuesMK
l (LedgerTables blk TrackingMK -> l blk TrackingMK)
-> LedgerTables blk TrackingMK -> l blk TrackingMK
forall a b. (a -> b) -> a -> b
$ (forall k v.
LedgerTableConstraints' blk k v =>
ValuesMK k v -> TrackingMK k v)
-> LedgerTables blk ValuesMK -> LedgerTables blk TrackingMK
forall l (mk1 :: MapKind) (mk2 :: MapKind).
LedgerTableConstraints l =>
(forall k v. LedgerTableConstraints' blk k v => mk1 k v -> mk2 k v)
-> LedgerTables l mk1 -> LedgerTables l mk2
ltliftA (ValuesMK k v -> ValuesMK k v -> TrackingMK k v
forall k v.
(Ord k, Eq v) =>
ValuesMK k v -> ValuesMK k v -> TrackingMK k v
rawCalculateDifference ValuesMK k v
forall k v. (Ord k, Eq v) => ValuesMK k v
forall (mk :: MapKind) k v. (ZeroableMK mk, Ord k, Eq v) => mk k v
emptyMK) (l blk ValuesMK -> LedgerTables blk ValuesMK
forall (l :: StateKind) blk (mk :: MapKind).
(HasLedgerTables l blk, CanMapMK mk, CanMapKeysMK mk,
ZeroableMK mk) =>
l blk mk -> LedgerTables blk mk
ltprj l blk ValuesMK
l)
calculateDifference' ::
( HasLedgerTables l blk
, HasLedgerTables l' blk
) =>
l blk ValuesMK -> l' blk ValuesMK -> LedgerTables blk TrackingMK
calculateDifference' :: forall (l :: StateKind) blk (l' :: StateKind).
(HasLedgerTables l blk, HasLedgerTables l' blk) =>
l blk ValuesMK -> l' blk ValuesMK -> LedgerTables blk TrackingMK
calculateDifference' l blk ValuesMK
l1 l' blk ValuesMK
l2 = (forall k v.
LedgerTableConstraints' blk k v =>
ValuesMK k v -> ValuesMK k v -> TrackingMK k v)
-> LedgerTables blk ValuesMK
-> LedgerTables blk ValuesMK
-> LedgerTables blk TrackingMK
forall l (mk1 :: MapKind) (mk2 :: MapKind) (mk3 :: MapKind).
LedgerTableConstraints l =>
(forall k v.
LedgerTableConstraints' blk k v =>
mk1 k v -> mk2 k v -> mk3 k v)
-> LedgerTables l mk1 -> LedgerTables l mk2 -> LedgerTables l mk3
ltliftA2 ValuesMK k v -> ValuesMK k v -> TrackingMK k v
forall k v.
(Ord k, Eq v) =>
ValuesMK k v -> ValuesMK k v -> TrackingMK k v
forall k v.
LedgerTableConstraints' blk k v =>
ValuesMK k v -> ValuesMK k v -> TrackingMK k v
rawCalculateDifference (l blk ValuesMK -> LedgerTables blk ValuesMK
forall (l :: StateKind) blk (mk :: MapKind).
(HasLedgerTables l blk, CanMapMK mk, CanMapKeysMK mk,
ZeroableMK mk) =>
l blk mk -> LedgerTables blk mk
ltprj l blk ValuesMK
l1) (l' blk ValuesMK -> LedgerTables blk ValuesMK
forall (l :: StateKind) blk (mk :: MapKind).
(HasLedgerTables l blk, CanMapMK mk, CanMapKeysMK mk,
ZeroableMK mk) =>
l blk mk -> LedgerTables blk mk
ltprj l' blk ValuesMK
l2)
calculateDifference ::
(HasLedgerTables l blk, HasLedgerTables l' blk) =>
l blk ValuesMK -> l' blk ValuesMK -> l' blk TrackingMK
calculateDifference :: forall (l :: StateKind) blk (l' :: StateKind).
(HasLedgerTables l blk, HasLedgerTables l' blk) =>
l blk ValuesMK -> l' blk ValuesMK -> l' blk TrackingMK
calculateDifference l blk ValuesMK
l1 l' blk ValuesMK
l2 = l' blk ValuesMK -> LedgerTables blk TrackingMK -> l' blk TrackingMK
forall (l :: StateKind) blk (mk' :: MapKind) (mk :: MapKind).
(HasLedgerTables l blk, CanMapMK mk', CanMapKeysMK mk',
ZeroableMK mk') =>
l blk mk -> LedgerTables blk mk' -> l blk mk'
ltwith l' blk ValuesMK
l2 (LedgerTables blk TrackingMK -> l' blk TrackingMK)
-> LedgerTables blk TrackingMK -> l' blk TrackingMK
forall a b. (a -> b) -> a -> b
$ l blk ValuesMK -> l' blk ValuesMK -> LedgerTables blk TrackingMK
forall (l :: StateKind) blk (l' :: StateKind).
(HasLedgerTables l blk, HasLedgerTables l' blk) =>
l blk ValuesMK -> l' blk ValuesMK -> LedgerTables blk TrackingMK
calculateDifference' l blk ValuesMK
l1 l' blk ValuesMK
l2
rawAttachAndApplyDiffs ::
Ord k =>
ValuesMK k v ->
DiffMK k v ->
TrackingMK k v
rawAttachAndApplyDiffs :: forall k v. Ord k => ValuesMK k v -> DiffMK k v -> TrackingMK k v
rawAttachAndApplyDiffs (ValuesMK Map k v
v) (DiffMK Diff k v
d) = Map k v -> Diff k v -> TrackingMK k v
forall k v. Map k v -> Diff k v -> TrackingMK k v
TrackingMK (Map k v -> Diff k v -> Map k v
forall k v. Ord k => Map k v -> Diff k v -> Map k v
Diff.applyDiff Map k v
v Diff k v
d) Diff k v
d
attachAndApplyDiffs' ::
( HasLedgerTables l blk
, HasLedgerTables l' blk
) =>
l blk ValuesMK -> l' blk DiffMK -> LedgerTables blk TrackingMK
attachAndApplyDiffs' :: forall (l :: StateKind) blk (l' :: StateKind).
(HasLedgerTables l blk, HasLedgerTables l' blk) =>
l blk ValuesMK -> l' blk DiffMK -> LedgerTables blk TrackingMK
attachAndApplyDiffs' l blk ValuesMK
l1 l' blk DiffMK
l2 = (forall k v.
LedgerTableConstraints' blk k v =>
ValuesMK k v -> DiffMK k v -> TrackingMK k v)
-> LedgerTables blk ValuesMK
-> LedgerTables blk DiffMK
-> LedgerTables blk TrackingMK
forall l (mk1 :: MapKind) (mk2 :: MapKind) (mk3 :: MapKind).
LedgerTableConstraints l =>
(forall k v.
LedgerTableConstraints' blk k v =>
mk1 k v -> mk2 k v -> mk3 k v)
-> LedgerTables l mk1 -> LedgerTables l mk2 -> LedgerTables l mk3
ltliftA2 ValuesMK k v -> DiffMK k v -> TrackingMK k v
forall k v. Ord k => ValuesMK k v -> DiffMK k v -> TrackingMK k v
forall k v.
LedgerTableConstraints' blk k v =>
ValuesMK k v -> DiffMK k v -> TrackingMK k v
rawAttachAndApplyDiffs (l blk ValuesMK -> LedgerTables blk ValuesMK
forall (l :: StateKind) blk (mk :: MapKind).
(HasLedgerTables l blk, CanMapMK mk, CanMapKeysMK mk,
ZeroableMK mk) =>
l blk mk -> LedgerTables blk mk
ltprj l blk ValuesMK
l1) (l' blk DiffMK -> LedgerTables blk DiffMK
forall (l :: StateKind) blk (mk :: MapKind).
(HasLedgerTables l blk, CanMapMK mk, CanMapKeysMK mk,
ZeroableMK mk) =>
l blk mk -> LedgerTables blk mk
ltprj l' blk DiffMK
l2)
attachAndApplyDiffs ::
(HasLedgerTables l blk, HasLedgerTables l' blk) =>
l blk ValuesMK -> l' blk DiffMK -> l' blk TrackingMK
attachAndApplyDiffs :: forall (l :: StateKind) blk (l' :: StateKind).
(HasLedgerTables l blk, HasLedgerTables l' blk) =>
l blk ValuesMK -> l' blk DiffMK -> l' blk TrackingMK
attachAndApplyDiffs l blk ValuesMK
l1 l' blk DiffMK
l2 = l' blk DiffMK -> LedgerTables blk TrackingMK -> l' blk TrackingMK
forall (l :: StateKind) blk (mk' :: MapKind) (mk :: MapKind).
(HasLedgerTables l blk, CanMapMK mk', CanMapKeysMK mk',
ZeroableMK mk') =>
l blk mk -> LedgerTables blk mk' -> l blk mk'
ltwith l' blk DiffMK
l2 (LedgerTables blk TrackingMK -> l' blk TrackingMK)
-> LedgerTables blk TrackingMK -> l' blk TrackingMK
forall a b. (a -> b) -> a -> b
$ l blk ValuesMK -> l' blk DiffMK -> LedgerTables blk TrackingMK
forall (l :: StateKind) blk (l' :: StateKind).
(HasLedgerTables l blk, HasLedgerTables l' blk) =>
l blk ValuesMK -> l' blk DiffMK -> LedgerTables blk TrackingMK
attachAndApplyDiffs' l blk ValuesMK
l1 l' blk DiffMK
l2
rawAttachEmptyDiffs :: Ord k => ValuesMK k v -> TrackingMK k v
rawAttachEmptyDiffs :: forall k v. Ord k => ValuesMK k v -> TrackingMK k v
rawAttachEmptyDiffs (ValuesMK Map k v
v) = Map k v -> Diff k v -> TrackingMK k v
forall k v. Map k v -> Diff k v -> TrackingMK k v
TrackingMK Map k v
v Diff k v
forall a. Monoid a => a
mempty
attachEmptyDiffs :: HasLedgerTables l blk => l blk ValuesMK -> l blk TrackingMK
attachEmptyDiffs :: forall (l :: StateKind) blk.
HasLedgerTables l blk =>
l blk ValuesMK -> l blk TrackingMK
attachEmptyDiffs l blk ValuesMK
l1 = l blk ValuesMK -> LedgerTables blk TrackingMK -> l blk TrackingMK
forall (l :: StateKind) blk (mk' :: MapKind) (mk :: MapKind).
(HasLedgerTables l blk, CanMapMK mk', CanMapKeysMK mk',
ZeroableMK mk') =>
l blk mk -> LedgerTables blk mk' -> l blk mk'
ltwith l blk ValuesMK
l1 (LedgerTables blk TrackingMK -> l blk TrackingMK)
-> LedgerTables blk TrackingMK -> l blk TrackingMK
forall a b. (a -> b) -> a -> b
$ (forall k v.
LedgerTableConstraints' blk k v =>
ValuesMK k v -> TrackingMK k v)
-> LedgerTables blk ValuesMK -> LedgerTables blk TrackingMK
forall l (mk1 :: MapKind) (mk2 :: MapKind).
LedgerTableConstraints l =>
(forall k v. LedgerTableConstraints' blk k v => mk1 k v -> mk2 k v)
-> LedgerTables l mk1 -> LedgerTables l mk2
ltmap ValuesMK k v -> TrackingMK k v
forall k v. Ord k => ValuesMK k v -> TrackingMK k v
forall k v.
LedgerTableConstraints' blk k v =>
ValuesMK k v -> TrackingMK k v
rawAttachEmptyDiffs (l blk ValuesMK -> LedgerTables blk ValuesMK
forall (l :: StateKind) blk (mk :: MapKind).
(HasLedgerTables l blk, CanMapMK mk, CanMapKeysMK mk,
ZeroableMK mk) =>
l blk mk -> LedgerTables blk mk
ltprj l blk ValuesMK
l1)
rawPrependTrackingDiffs ::
Ord k =>
TrackingMK k v ->
TrackingMK k v ->
TrackingMK k v
rawPrependTrackingDiffs :: forall k v.
Ord k =>
TrackingMK k v -> TrackingMK k v -> TrackingMK k v
rawPrependTrackingDiffs (TrackingMK Map k v
_ Diff k v
d1) (TrackingMK Map k v
v Diff k v
d2) =
Map k v -> Diff k v -> TrackingMK k v
forall k v. Map k v -> Diff k v -> TrackingMK k v
TrackingMK Map k v
v (Diff k v
d1 Diff k v -> Diff k v -> Diff k v
forall a. Semigroup a => a -> a -> a
<> Diff k v
d2)
prependTrackingDiffs' ::
( HasLedgerTables l blk
, HasLedgerTables l' blk
) =>
l blk TrackingMK -> l' blk TrackingMK -> LedgerTables blk TrackingMK
prependTrackingDiffs' :: forall (l :: StateKind) blk (l' :: StateKind).
(HasLedgerTables l blk, HasLedgerTables l' blk) =>
l blk TrackingMK
-> l' blk TrackingMK -> LedgerTables blk TrackingMK
prependTrackingDiffs' l blk TrackingMK
l1 l' blk TrackingMK
l2 = (forall k v.
LedgerTableConstraints' blk k v =>
TrackingMK k v -> TrackingMK k v -> TrackingMK k v)
-> LedgerTables blk TrackingMK
-> LedgerTables blk TrackingMK
-> LedgerTables blk TrackingMK
forall l (mk1 :: MapKind) (mk2 :: MapKind) (mk3 :: MapKind).
LedgerTableConstraints l =>
(forall k v.
LedgerTableConstraints' blk k v =>
mk1 k v -> mk2 k v -> mk3 k v)
-> LedgerTables l mk1 -> LedgerTables l mk2 -> LedgerTables l mk3
ltliftA2 TrackingMK k v -> TrackingMK k v -> TrackingMK k v
forall k v.
Ord k =>
TrackingMK k v -> TrackingMK k v -> TrackingMK k v
forall k v.
LedgerTableConstraints' blk k v =>
TrackingMK k v -> TrackingMK k v -> TrackingMK k v
rawPrependTrackingDiffs (l blk TrackingMK -> LedgerTables blk TrackingMK
forall (l :: StateKind) blk (mk :: MapKind).
(HasLedgerTables l blk, CanMapMK mk, CanMapKeysMK mk,
ZeroableMK mk) =>
l blk mk -> LedgerTables blk mk
ltprj l blk TrackingMK
l1) (l' blk TrackingMK -> LedgerTables blk TrackingMK
forall (l :: StateKind) blk (mk :: MapKind).
(HasLedgerTables l blk, CanMapMK mk, CanMapKeysMK mk,
ZeroableMK mk) =>
l blk mk -> LedgerTables blk mk
ltprj l' blk TrackingMK
l2)
prependTrackingDiffs ::
(HasLedgerTables l blk, HasLedgerTables l' blk) =>
l blk TrackingMK -> l' blk TrackingMK -> l' blk TrackingMK
prependTrackingDiffs :: forall (l :: StateKind) blk (l' :: StateKind).
(HasLedgerTables l blk, HasLedgerTables l' blk) =>
l blk TrackingMK -> l' blk TrackingMK -> l' blk TrackingMK
prependTrackingDiffs l blk TrackingMK
l1 l' blk TrackingMK
l2 = l' blk TrackingMK
-> LedgerTables blk TrackingMK -> l' blk TrackingMK
forall (l :: StateKind) blk (mk' :: MapKind) (mk :: MapKind).
(HasLedgerTables l blk, CanMapMK mk', CanMapKeysMK mk',
ZeroableMK mk') =>
l blk mk -> LedgerTables blk mk' -> l blk mk'
ltwith l' blk TrackingMK
l2 (LedgerTables blk TrackingMK -> l' blk TrackingMK)
-> LedgerTables blk TrackingMK -> l' blk TrackingMK
forall a b. (a -> b) -> a -> b
$ l blk TrackingMK
-> l' blk TrackingMK -> LedgerTables blk TrackingMK
forall (l :: StateKind) blk (l' :: StateKind).
(HasLedgerTables l blk, HasLedgerTables l' blk) =>
l blk TrackingMK
-> l' blk TrackingMK -> LedgerTables blk TrackingMK
prependTrackingDiffs' l blk TrackingMK
l1 l' blk TrackingMK
l2
restrictValuesMK ::
Ord k =>
ValuesMK k v ->
KeysMK k v ->
ValuesMK k v
restrictValuesMK :: forall k v. Ord k => ValuesMK k v -> KeysMK k v -> ValuesMK k v
restrictValuesMK (ValuesMK Map k v
v) (KeysMK Set k
k) = Map k v -> ValuesMK k v
forall k v. Map k v -> ValuesMK k v
ValuesMK (Map k v -> ValuesMK k v) -> Map k v -> ValuesMK k v
forall a b. (a -> b) -> a -> b
$ Map k v
v Map k v -> Set k -> Map k v
forall k a. Ord k => Map k a -> Set k -> Map k a
`Map.restrictKeys` Set k
k
unionValues ::
Ord k =>
ValuesMK k v ->
ValuesMK k v ->
ValuesMK k v
unionValues :: forall k v. Ord k => ValuesMK k v -> ValuesMK k v -> ValuesMK k v
unionValues (ValuesMK Map k v
m1) (ValuesMK Map k v
m2) = Map k v -> ValuesMK k v
forall k v. Map k v -> ValuesMK k v
ValuesMK (Map k v -> ValuesMK k v) -> Map k v -> ValuesMK k v
forall a b. (a -> b) -> a -> b
$ Map k v -> Map k v -> Map k v
forall k a. Ord k => Map k a -> Map k a -> Map k a
Map.union Map k v
m1 Map k v
m2