Safe Haskell | None |
---|---|
Language | Haskell2010 |
Ouroboros.Consensus.Ledger.Tables.Combinators
Description
Ledger tables are barbie-types (see barbies
package), though unfortunately
we can not implement classes like FunctorB
for ledger tables because the
class expects a type that is indexed over a (uni-)functor. Ledger tables
are indexed over bifunctors (mapkinds), so the kinds do not match. To cut
on boilerplate, we do not define variants of FunctorB
(and similar classes)
for types that are indexed over bifunctors. Instead, we define specialised
variants of class functions and utility functions. For example:
ltmap
instead ofbmap
orbmapC
lttraverse
instead ofbtraverse
orbtraverseC
ltsequence
instead ofbsequence
.
TODO: if we make mapkinds of kind (k1, k2) -> Type
instead of k1 -> k2 ->
Type
, then we could reuse most of the barbies
machinery.
Synopsis
- type LedgerTableConstraints (l ∷ LedgerStateKind) = (Ord (TxIn l), Eq (TxOut l), MemPack (TxIn l), IndexedMemPack (MemPackIdx l EmptyMK) (TxOut l))
- ltmap ∷ ∀ (l ∷ LedgerStateKind) mk1 mk2. LedgerTableConstraints l ⇒ (∀ k v. LedgerTableConstraints' l k v ⇒ mk1 k v → mk2 k v) → LedgerTables l mk1 → LedgerTables l mk2
- lttraverse ∷ ∀ f (l ∷ LedgerStateKind) mk1 mk2. (Applicative f, LedgerTableConstraints l) ⇒ (∀ k v. LedgerTableConstraints' l k v ⇒ mk1 k v → f (mk2 k v)) → LedgerTables l mk1 → f (LedgerTables l mk2)
- ltsequence ∷ ∀ f (l ∷ LedgerStateKind) (mk ∷ Type → Type → Type). (Applicative f, LedgerTableConstraints l) ⇒ LedgerTables l (f :..: mk) → f (LedgerTables l mk)
- ltprod ∷ ∀ (l ∷ LedgerStateKind) (f ∷ MapKind) (g ∷ MapKind). LedgerTables l f → LedgerTables l g → LedgerTables l (Product2 f g)
- ltpure ∷ ∀ (l ∷ LedgerStateKind) mk. LedgerTableConstraints l ⇒ (∀ k v. LedgerTableConstraints' l k v ⇒ mk k v) → LedgerTables l mk
- ltap ∷ ∀ (l ∷ LedgerStateKind) (mk1 ∷ Type → Type → Type) (mk2 ∷ Type → Type → Type). LedgerTableConstraints l ⇒ LedgerTables l (mk1 -..-> mk2) → LedgerTables l mk1 → LedgerTables l mk2
- ltliftA ∷ ∀ (l ∷ LedgerStateKind) mk1 mk2. LedgerTableConstraints l ⇒ (∀ k v. LedgerTableConstraints' l k v ⇒ mk1 k v → mk2 k v) → LedgerTables l mk1 → LedgerTables l mk2
- ltliftA2 ∷ ∀ (l ∷ LedgerStateKind) mk1 mk2 mk3. LedgerTableConstraints l ⇒ (∀ k v. LedgerTableConstraints' l k v ⇒ mk1 k v → mk2 k v → mk3 k v) → LedgerTables l mk1 → LedgerTables l mk2 → LedgerTables l mk3
- ltliftA3 ∷ ∀ (l ∷ LedgerStateKind) mk1 mk2 mk3 mk4. LedgerTableConstraints l ⇒ (∀ k v. LedgerTableConstraints' l 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
- ltliftA4 ∷ ∀ (l ∷ LedgerStateKind) mk1 mk2 mk3 mk4 mk5. LedgerTableConstraints l ⇒ (∀ k v. LedgerTableConstraints' l k v ⇒ mk1 k v → mk2 k v → mk3 k v → mk4 k v → mk5 k v) → LedgerTables l mk1 → LedgerTables l mk2 → LedgerTables l mk3 → LedgerTables l mk4 → LedgerTables l mk5
- ltzipWith2A ∷ ∀ f (l ∷ LedgerStateKind) mk1 mk2 mk3. (Applicative f, LedgerTableConstraints l) ⇒ (∀ k v. LedgerTableConstraints' l k v ⇒ mk1 k v → mk2 k v → f (mk3 k v)) → LedgerTables l mk1 → LedgerTables l mk2 → f (LedgerTables l mk3)
- ltcollapse ∷ ∀ (l ∷ LedgerStateKind) a. LedgerTables l (K2 a ∷ Type → Type → Type) → a
- fn2_1 ∷ ∀ {k1} {k2} f (a ∷ k1) (b ∷ k2) g. (f a b → g a b) → (f -..-> g) a b
- fn2_2 ∷ ∀ {k1} {k2} f (a ∷ k1) (b ∷ k2) f' f''. (f a b → f' a b → f'' a b) → (f -..-> (f' -..-> f'')) a b
- fn2_3 ∷ ∀ {k1} {k2} f (a ∷ k1) (b ∷ k2) f' f'' f'''. (f a b → f' a b → f'' a b → f''' a b) → (f -..-> (f' -..-> (f'' -..-> f'''))) a b
- fn2_4 ∷ ∀ {k1} {k2} f (a ∷ k1) (b ∷ k2) f' f'' f''' f''''. (f a b → f' a b → f'' a b → f''' a b → f'''' a b) → (f -..-> (f' -..-> (f'' -..-> (f''' -..-> f'''')))) a b
- newtype ((f ∷ k1 → k2 → Type) -..-> (g ∷ k1 → k2 → Type)) (a ∷ k1) (b ∷ k2) = Fn2 {
- apFn2 ∷ f a b → g a b
- (...:) ∷ (y → z) → (x0 → x1 → x2 → x3 → y) → x0 → x1 → x2 → x3 → z
- (..:) ∷ (y → z) → (x0 → x1 → x2 → y) → x0 → x1 → x2 → z
- (.:) ∷ (y → z) → (x0 → x1 → y) → x0 → x1 → z
- newtype K2 a (b ∷ k1) (c ∷ k2) = K2 {
- unK2 ∷ a
- newtype ((f ∷ k3 → Type) :..: (g ∷ k1 → k2 → k3)) (a ∷ k1) (b ∷ k2) = Comp2 {
- unComp2 ∷ f (g a b)
Common constraints
type LedgerTableConstraints (l ∷ LedgerStateKind) = (Ord (TxIn l), Eq (TxOut l), MemPack (TxIn l), IndexedMemPack (MemPackIdx l EmptyMK) (TxOut l)) Source #
The Eq (TxOut l)
constraint is here only because of
diff
. Once the ledger provides
deltas instead of us being the ones that compute them, we can probably drop
this constraint.
Functor
ltmap ∷ ∀ (l ∷ LedgerStateKind) mk1 mk2. LedgerTableConstraints l ⇒ (∀ k v. LedgerTableConstraints' l k v ⇒ mk1 k v → mk2 k v) → LedgerTables l mk1 → LedgerTables l mk2 Source #
Like bmap
, but for ledger tables.
Traversable
lttraverse ∷ ∀ f (l ∷ LedgerStateKind) mk1 mk2. (Applicative f, LedgerTableConstraints l) ⇒ (∀ k v. LedgerTableConstraints' l k v ⇒ mk1 k v → f (mk2 k v)) → LedgerTables l mk1 → f (LedgerTables l mk2) Source #
Like btraverse
, but for ledger tables.
Utility functions
ltsequence ∷ ∀ f (l ∷ LedgerStateKind) (mk ∷ Type → Type → Type). (Applicative f, LedgerTableConstraints l) ⇒ LedgerTables l (f :..: mk) → f (LedgerTables l mk) Source #
Applicative
ltprod ∷ ∀ (l ∷ LedgerStateKind) (f ∷ MapKind) (g ∷ MapKind). LedgerTables l f → LedgerTables l g → LedgerTables l (Product2 f g) Source #
Like bprod
, but for ledger tables.
ltpure ∷ ∀ (l ∷ LedgerStateKind) mk. LedgerTableConstraints l ⇒ (∀ k v. LedgerTableConstraints' l k v ⇒ mk k v) → LedgerTables l mk Source #
Like bpure
, but for ledger tables.
Utility functions
ltap ∷ ∀ (l ∷ LedgerStateKind) (mk1 ∷ Type → Type → Type) (mk2 ∷ Type → Type → Type). LedgerTableConstraints l ⇒ LedgerTables l (mk1 -..-> mk2) → LedgerTables l mk1 → LedgerTables l mk2 Source #
ltliftA ∷ ∀ (l ∷ LedgerStateKind) mk1 mk2. LedgerTableConstraints l ⇒ (∀ k v. LedgerTableConstraints' l k v ⇒ mk1 k v → mk2 k v) → LedgerTables l mk1 → LedgerTables l mk2 Source #
ltliftA2 ∷ ∀ (l ∷ LedgerStateKind) mk1 mk2 mk3. LedgerTableConstraints l ⇒ (∀ k v. LedgerTableConstraints' l k v ⇒ mk1 k v → mk2 k v → mk3 k v) → LedgerTables l mk1 → LedgerTables l mk2 → LedgerTables l mk3 Source #
ltliftA3 ∷ ∀ (l ∷ LedgerStateKind) mk1 mk2 mk3 mk4. LedgerTableConstraints l ⇒ (∀ k v. LedgerTableConstraints' l 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 Source #
ltliftA4 ∷ ∀ (l ∷ LedgerStateKind) mk1 mk2 mk3 mk4 mk5. LedgerTableConstraints l ⇒ (∀ k v. LedgerTableConstraints' l k v ⇒ mk1 k v → mk2 k v → mk3 k v → mk4 k v → mk5 k v) → LedgerTables l mk1 → LedgerTables l mk2 → LedgerTables l mk3 → LedgerTables l mk4 → LedgerTables l mk5 Source #
Applicative and Traversable
ltzipWith2A ∷ ∀ f (l ∷ LedgerStateKind) mk1 mk2 mk3. (Applicative f, LedgerTableConstraints l) ⇒ (∀ k v. LedgerTableConstraints' l k v ⇒ mk1 k v → mk2 k v → f (mk3 k v)) → LedgerTables l mk1 → LedgerTables l mk2 → f (LedgerTables l mk3) Source #
Collapsing
ltcollapse ∷ ∀ (l ∷ LedgerStateKind) a. LedgerTables l (K2 a ∷ Type → Type → Type) → a Source #
Lifted functions
fn2_1 ∷ ∀ {k1} {k2} f (a ∷ k1) (b ∷ k2) g. (f a b → g a b) → (f -..-> g) a b Source #
Construct a lifted function.
fn2_2 ∷ ∀ {k1} {k2} f (a ∷ k1) (b ∷ k2) f' f''. (f a b → f' a b → f'' a b) → (f -..-> (f' -..-> f'')) a b Source #
Construct a binary lifted function
fn2_3 ∷ ∀ {k1} {k2} f (a ∷ k1) (b ∷ k2) f' f'' f'''. (f a b → f' a b → f'' a b → f''' a b) → (f -..-> (f' -..-> (f'' -..-> f'''))) a b Source #
Construct a ternary lifted function.
fn2_4 ∷ ∀ {k1} {k2} f (a ∷ k1) (b ∷ k2) f' f'' f''' f''''. (f a b → f' a b → f'' a b → f''' a b → f'''' a b) → (f -..-> (f' -..-> (f'' -..-> (f''' -..-> f'''')))) a b Source #
Construct a quaternary lifted function.
newtype ((f ∷ k1 → k2 → Type) -..-> (g ∷ k1 → k2 → Type)) (a ∷ k1) (b ∷ k2) infixr 1 Source #
Lifted functions
Similar to (-.->)
, but for f
and g
that are bifunctors.
Re-exports of utils
Basic bifunctors
newtype K2 a (b ∷ k1) (c ∷ k2) Source #
The constant type bifunctor.
Instances
Bifunctor (K2 a ∷ Type → Type → Type) Source # | |
Functor (K2 a b ∷ Type → Type) Source # | |
Foldable (K2 a b ∷ Type → Type) Source # | |
Defined in Ouroboros.Consensus.Ledger.Tables.Combinators Methods fold ∷ Monoid m ⇒ K2 a b m → m # foldMap ∷ Monoid m ⇒ (a0 → m) → K2 a b a0 → m # foldMap' ∷ Monoid m ⇒ (a0 → m) → K2 a b a0 → m # foldr ∷ (a0 → b0 → b0) → b0 → K2 a b a0 → b0 # foldr' ∷ (a0 → b0 → b0) → b0 → K2 a b a0 → b0 # foldl ∷ (b0 → a0 → b0) → b0 → K2 a b a0 → b0 # foldl' ∷ (b0 → a0 → b0) → b0 → K2 a b a0 → b0 # foldr1 ∷ (a0 → a0 → a0) → K2 a b a0 → a0 # foldl1 ∷ (a0 → a0 → a0) → K2 a b a0 → a0 # elem ∷ Eq a0 ⇒ a0 → K2 a b a0 → Bool # maximum ∷ Ord a0 ⇒ K2 a b a0 → a0 # minimum ∷ Ord a0 ⇒ K2 a b a0 → a0 # | |
Traversable (K2 a b ∷ Type → Type) Source # | |
Monoid a ⇒ Monoid (K2 a b c) Source # | |
Semigroup a ⇒ Semigroup (K2 a b c) Source # | |
Show a ⇒ Show (K2 a b c) Source # | |
Eq a ⇒ Eq (K2 a b c) Source # | |
newtype ((f ∷ k3 → Type) :..: (g ∷ k1 → k2 → k3)) (a ∷ k1) (b ∷ k2) infixr 7 Source #
Composition of functor after bifunctor.
Example: Comp2 (Just (17, True)) :: (Maybe :..: (,)) Int Bool
Instances
(Functor f, Bifunctor g) ⇒ Bifunctor (f :..: g) Source # | |
(Functor f, Functor (g a)) ⇒ Functor ((f :..: g) a) Source # | |
(Foldable f, Foldable (g a)) ⇒ Foldable ((f :..: g) a) Source # | |
Defined in Ouroboros.Consensus.Ledger.Tables.Combinators Methods fold ∷ Monoid m ⇒ (f :..: g) a m → m # foldMap ∷ Monoid m ⇒ (a0 → m) → (f :..: g) a a0 → m # foldMap' ∷ Monoid m ⇒ (a0 → m) → (f :..: g) a a0 → m # foldr ∷ (a0 → b → b) → b → (f :..: g) a a0 → b # foldr' ∷ (a0 → b → b) → b → (f :..: g) a a0 → b # foldl ∷ (b → a0 → b) → b → (f :..: g) a a0 → b # foldl' ∷ (b → a0 → b) → b → (f :..: g) a a0 → b # foldr1 ∷ (a0 → a0 → a0) → (f :..: g) a a0 → a0 # foldl1 ∷ (a0 → a0 → a0) → (f :..: g) a a0 → a0 # toList ∷ (f :..: g) a a0 → [a0] # null ∷ (f :..: g) a a0 → Bool # length ∷ (f :..: g) a a0 → Int # elem ∷ Eq a0 ⇒ a0 → (f :..: g) a a0 → Bool # maximum ∷ Ord a0 ⇒ (f :..: g) a a0 → a0 # minimum ∷ Ord a0 ⇒ (f :..: g) a a0 → a0 # | |
(Traversable f, Traversable (g a)) ⇒ Traversable ((f :..: g) a) Source # | |
Monoid (f (g a b)) ⇒ Monoid ((f :..: g) a b) Source # | |
Semigroup (f (g a b)) ⇒ Semigroup ((f :..: g) a b) Source # | |
Show (f (g a b)) ⇒ Show ((f :..: g) a b) Source # | |
Eq (f (g a b)) ⇒ Eq ((f :..: g) a b) Source # | |
Orphan instances
(∀ k v. LedgerTableConstraints' l k v ⇒ Monoid (mk k v), LedgerTableConstraints l) ⇒ Monoid (LedgerTables l mk) Source # | |
Methods mempty ∷ LedgerTables l mk # mappend ∷ LedgerTables l mk → LedgerTables l mk → LedgerTables l mk # mconcat ∷ [LedgerTables l mk] → LedgerTables l mk # | |
(∀ k v. LedgerTableConstraints' l k v ⇒ Semigroup (mk k v), LedgerTableConstraints l) ⇒ Semigroup (LedgerTables l mk) Source # | |
Methods (<>) ∷ LedgerTables l mk → LedgerTables l mk → LedgerTables l mk # sconcat ∷ NonEmpty (LedgerTables l mk) → LedgerTables l mk # stimes ∷ Integral b ⇒ b → LedgerTables l mk → LedgerTables l mk # |