| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Test.Ouroboros.Consensus.ChainGenerator.Counting
Description
Very strong types for working with indices, counts, etc within sequences.
Synopsis
- newtype Count base (elem ∷ kelem) (which ∷ kwhich) = Count Int
- forgetBase ∷ ∀ {kelem} {kwhich} base (elem ∷ kelem) (which ∷ kwhich). Count base elem which → Forgotten (Count () elem which)
- forgetElem ∷ ∀ {kelem} {kwhich} base (elem ∷ kelem) (which ∷ kwhich). Count base elem which → Forgotten (Count base () which)
- getCount ∷ ∀ {kelem} {kwhich} base (elem ∷ kelem) (which ∷ kwhich). Count base elem which → Int
- (+) ∷ ∀ {kelem} {kwhich} base (elem ∷ kelem) (which ∷ kwhich). Count base elem which → Int → Count base elem which
- (-) ∷ ∀ {kelem} {kwhich} base (elem ∷ kelem) (which ∷ kwhich). Count base elem which → Int → Count base elem which
- type Index base (elem ∷ kelem) = Count base elem Preds
- data Preds
- type Size base (elem ∷ kelem) = Count base elem Total
- data Total
- forRange_ ∷ ∀ {kelem} f base (elem ∷ kelem) a. Applicative f ⇒ Size base elem → (Index base elem → f a) → f ()
- lastIndex ∷ ∀ {kelem} base (elem ∷ kelem). Size base elem → Index base elem
- range ∷ ∀ {kelem} base (elem ∷ kelem). Size base elem → [Index base elem]
- uniformIndex ∷ ∀ {kelem} g m base (elem ∷ kelem). StatefulGen g m ⇒ Size base elem → g → m (Index base elem)
- data Contains (elem ∷ kelem) outer inner where
- data Lbl (lbl ∷ k) = Lbl
- data SomeWindow (lbl ∷ klbl) outer (elem ∷ kelem) = SomeWindow !(Proxy skolem) !(Contains elem outer (Win lbl skolem))
- data Win (lbl ∷ klbl) skolem
- forgetWindow ∷ ∀ {kelem} (elem ∷ kelem) outer inner. Contains elem outer inner → Forgotten (Index outer elem, Index outer elem)
- fromWindow ∷ ∀ {kelem} (elem ∷ kelem) outer inner. Contains elem outer inner → Index inner elem → Index outer elem
- fromWindowVar ∷ ∀ {kelem1} {kelem2} (elem ∷ kelem1) outer inner (x ∷ kelem2). Contains elem outer inner → Var inner x → Var outer x
- joinWin ∷ ∀ {kelem} (elem ∷ kelem) outer mid inner. Contains elem outer mid → Contains elem mid inner → Contains elem outer inner
- toWindow ∷ ∀ {kelem} (elem ∷ kelem) outer inner. Contains elem outer inner → Index outer elem → Maybe (Index inner elem)
- toWindowVar ∷ ∀ {kelem1} {kelem2} (elem ∷ kelem1) outer inner (x ∷ kelem2). Contains elem outer inner → Var outer x → Var inner x
- truncateWin ∷ ∀ {kelem} (elem ∷ kelem) outer inner. Contains elem outer inner → Size inner elem → Contains elem outer inner
- windowLast ∷ ∀ {kelem} (elem ∷ kelem) outer inner. Contains elem outer inner → Index outer elem
- windowSize ∷ ∀ {kelem} (elem ∷ kelem) outer inner. Contains elem outer inner → Size inner elem
- windowStart ∷ ∀ {kelem} (elem ∷ kelem) outer inner. Contains elem outer inner → Index outer elem
- withSuffixWindow ∷ ∀ {kelem} {klbl} outer (elem ∷ kelem) (lbl ∷ klbl). Size outer elem → Lbl lbl → Index outer elem → SomeWindow lbl outer elem
- withTopWindow ∷ ∀ {k1} {k2} (lbl ∷ k1) (elem ∷ k2) ans. Lbl lbl → Int → (∀ base. Proxy base → SomeWindow lbl base elem → ans) → ans
- withWindow ∷ ∀ {kelem} {klbl} outer (elem ∷ kelem) (lbl ∷ klbl) x. Size outer elem → Lbl lbl → Index outer elem → Size x elem → SomeWindow lbl outer elem
- withWindowBetween ∷ ∀ {kelem} {klbl} outer (elem ∷ kelem) (lbl ∷ klbl). Size outer elem → Lbl lbl → Index outer elem → Index outer elem → SomeWindow lbl outer elem
- newtype MVector (base ∷ k) (elem ∷ k1) s a = MVector (MVector s a)
- newtype Vector (base ∷ k) (elem ∷ k1) a = Vector (Vector a)
- createV ∷ ∀ {k1} {k2} a (base ∷ k1) (elem ∷ k2). Unbox a ⇒ (∀ s. ST s (MVector base elem s a)) → Vector base elem a
- getMVector ∷ ∀ {k1} {k2} (base ∷ k1) (elem ∷ k2) s a. MVector base elem s a → MVector s a
- getVector ∷ ∀ {k1} {k2} (base ∷ k1) (elem ∷ k2) a. Vector base elem a → Vector a
- lengthMV ∷ ∀ {kelem} a base (elem ∷ kelem) s. Unbox a ⇒ MVector base elem s a → Size base elem
- lengthV ∷ ∀ {kelem} a base (elem ∷ kelem). Unbox a ⇒ Vector base elem a → Size base elem
- modifyMV ∷ ∀ {kelem} a base (elem ∷ kelem) s. Unbox a ⇒ MVector base elem s a → (a → a) → Index base elem → ST s ()
- readMV ∷ ∀ {kelem} a base (elem ∷ kelem) s. Unbox a ⇒ MVector base elem s a → Index base elem → ST s a
- readV ∷ ∀ {kelem} a base (elem ∷ kelem). Unbox a ⇒ Vector base elem a → Index base elem → a
- replicateMV ∷ ∀ {k} a base (elem ∷ k) s. Unbox a ⇒ Size base elem → ST s a → ST s (MVector base elem s a)
- sliceMV ∷ ∀ {k} a (elem ∷ k) outer inner s. Unbox a ⇒ Contains elem outer inner → MVector outer elem s a → MVector inner elem s a
- sliceV ∷ ∀ {k} a (elem ∷ k) outer inner. Unbox a ⇒ Contains elem outer inner → Vector outer elem a → Vector inner elem a
- unsafeThawV ∷ ∀ {k1} {k2} a (base ∷ k1) (elem ∷ k2) s. Unbox a ⇒ Vector base elem a → ST s (MVector base elem s a)
- writeMV ∷ ∀ {kelem} a base (elem ∷ kelem) s. Unbox a ⇒ MVector base elem s a → Index base elem → a → ST s ()
- data Other
- type Var base (elem ∷ kelem) = Count base elem Other
- joinVar ∷ ∀ {k} {kelem} base (elem ∷ k) s a (x ∷ kelem). MVector base elem s a → Var a x → Var base x
- toIndex ∷ ∀ {kelem} base (elem ∷ kelem). Var base elem → Index base elem
- toSize ∷ ∀ {kelem} base (elem ∷ kelem). Var base elem → Size base elem
- toVar ∷ ∀ {kelem} {kwhich} base (elem ∷ kelem) (which ∷ kwhich). Count base elem which → Var base elem
general counts
newtype Count base (elem ∷ kelem) (which ∷ kwhich) Source #
A type-indexed Int to represent counts of elements in containers
baseis the type-level name of the container in which we are counting (e.g.Win (Lbl HonestLbl) skolem1)elemis the type-level name of the elements in the container (e.g.SlotE)whichis the type-level name of some property that identifies the particular elements that we are counting (e.g.Pred,Total, orOther)
TODO: rename base to container
Instances
| Arbitrary (Count base elem which) Source # | |
| which ~~ Other ⇒ Enum (Count base elem which) Source # | |
Defined in Test.Ouroboros.Consensus.ChainGenerator.Counting Methods succ ∷ Count base elem which → Count base elem which # pred ∷ Count base elem which → Count base elem which # toEnum ∷ Int → Count base elem which # fromEnum ∷ Count base elem which → Int # enumFrom ∷ Count base elem which → [Count base elem which] # enumFromThen ∷ Count base elem which → Count base elem which → [Count base elem which] # enumFromTo ∷ Count base elem which → Count base elem which → [Count base elem which] # enumFromThenTo ∷ Count base elem which → Count base elem which → Count base elem which → [Count base elem which] # | |
| which ~~ Other ⇒ Num (Count base elem which) Source # | |
Defined in Test.Ouroboros.Consensus.ChainGenerator.Counting Methods (+) ∷ Count base elem which → Count base elem which → Count base elem which # (-) ∷ Count base elem which → Count base elem which → Count base elem which # (*) ∷ Count base elem which → Count base elem which → Count base elem which # negate ∷ Count base elem which → Count base elem which # abs ∷ Count base elem which → Count base elem which # signum ∷ Count base elem which → Count base elem which # fromInteger ∷ Integer → Count base elem which # | |
| Read (Count base elem which) Source # | |
| Show (Count base elem which) Source # | |
| Eq (Count base elem which) Source # | |
| Ord (Count base elem which) Source # | |
Defined in Test.Ouroboros.Consensus.ChainGenerator.Counting Methods compare ∷ Count base elem which → Count base elem which → Ordering # (<) ∷ Count base elem which → Count base elem which → Bool # (<=) ∷ Count base elem which → Count base elem which → Bool # (>) ∷ Count base elem which → Count base elem which → Bool # (>=) ∷ Count base elem which → Count base elem which → Bool # max ∷ Count base elem which → Count base elem which → Count base elem which # min ∷ Count base elem which → Count base elem which → Count base elem which # | |
forgetBase ∷ ∀ {kelem} {kwhich} base (elem ∷ kelem) (which ∷ kwhich). Count base elem which → Forgotten (Count () elem which) Source #
forgetElem ∷ ∀ {kelem} {kwhich} base (elem ∷ kelem) (which ∷ kwhich). Count base elem which → Forgotten (Count base () which) Source #
getCount ∷ ∀ {kelem} {kwhich} base (elem ∷ kelem) (which ∷ kwhich). Count base elem which → Int Source #
(+) ∷ ∀ {kelem} {kwhich} base (elem ∷ kelem) (which ∷ kwhich). Count base elem which → Int → Count base elem which infixl 6 Source #
(-) ∷ ∀ {kelem} {kwhich} base (elem ∷ kelem) (which ∷ kwhich). Count base elem which → Int → Count base elem which infixl 6 Source #
indices and sizes
forRange_ ∷ ∀ {kelem} f base (elem ∷ kelem) a. Applicative f ⇒ Size base elem → (Index base elem → f a) → f () Source #
uniformIndex ∷ ∀ {kelem} g m base (elem ∷ kelem). StatefulGen g m ⇒ Size base elem → g → m (Index base elem) Source #
windows
data Contains (elem ∷ kelem) outer inner Source #
Values of this type describe a window in a sequence of elements.
A window is an infix of the sequence, and it is described with an offset and a length or size (the number of elements in the window).
elemis a type-level name of the elements in the containing sequence (e.g.SlotE)outeris a type-level name identifying the containing sequence (e.g.Win (Lbl HonestLbl) skolem1)inneris a type-level name for the window that the value describes (e.g.Win (Lbl ScgLbl) skolem2)
Note that nothing is said about the containing sequence other than its type name.
TODO: rename Contains to Window
Constructors
| UnsafeContains | |
data SomeWindow (lbl ∷ klbl) outer (elem ∷ kelem) Source #
Constructors
| SomeWindow !(Proxy skolem) !(Contains elem outer (Win lbl skolem)) |
Instances
| Read (SomeWindow lbl outer elem) Source # | |
Defined in Test.Ouroboros.Consensus.ChainGenerator.Counting Methods readsPrec ∷ Int → ReadS (SomeWindow lbl outer elem) # readList ∷ ReadS [SomeWindow lbl outer elem] # readPrec ∷ ReadPrec (SomeWindow lbl outer elem) # readListPrec ∷ ReadPrec [SomeWindow lbl outer elem] # | |
| Show (SomeWindow lbl outer elem) Source # | |
Defined in Test.Ouroboros.Consensus.ChainGenerator.Counting Methods showsPrec ∷ Int → SomeWindow lbl outer elem → ShowS # show ∷ SomeWindow lbl outer elem → String # showList ∷ [SomeWindow lbl outer elem] → ShowS # | |
| Eq (SomeWindow lbl outer elem) Source # | |
Defined in Test.Ouroboros.Consensus.ChainGenerator.Counting Methods (==) ∷ SomeWindow lbl outer elem → SomeWindow lbl outer elem → Bool # (/=) ∷ SomeWindow lbl outer elem → SomeWindow lbl outer elem → Bool # | |
data Win (lbl ∷ klbl) skolem Source #
A type-level name for a window within some containing sequence
lblis a name component that can be used in multiple namesskolemis a component to differentiate between names which use the samelbl
TODO: rename Win to WinLabel
forgetWindow ∷ ∀ {kelem} (elem ∷ kelem) outer inner. Contains elem outer inner → Forgotten (Index outer elem, Index outer elem) Source #
fromWindow ∷ ∀ {kelem} (elem ∷ kelem) outer inner. Contains elem outer inner → Index inner elem → Index outer elem Source #
Converts an index of a window into an index in the containing sequence.
fromWindowVar ∷ ∀ {kelem1} {kelem2} (elem ∷ kelem1) outer inner (x ∷ kelem2). Contains elem outer inner → Var inner x → Var outer x Source #
Converts a count of elements in a window to a count of elements in the containing sequence.
joinWin ∷ ∀ {kelem} (elem ∷ kelem) outer mid inner. Contains elem outer mid → Contains elem mid inner → Contains elem outer inner Source #
Contains is a Semigroupoid
toWindow ∷ ∀ {kelem} (elem ∷ kelem) outer inner. Contains elem outer inner → Index outer elem → Maybe (Index inner elem) Source #
toWindowVar ∷ ∀ {kelem1} {kelem2} (elem ∷ kelem1) outer inner (x ∷ kelem2). Contains elem outer inner → Var outer x → Var inner x Source #
truncateWin ∷ ∀ {kelem} (elem ∷ kelem) outer inner. Contains elem outer inner → Size inner elem → Contains elem outer inner Source #
windowLast ∷ ∀ {kelem} (elem ∷ kelem) outer inner. Contains elem outer inner → Index outer elem Source #
windowSize ∷ ∀ {kelem} (elem ∷ kelem) outer inner. Contains elem outer inner → Size inner elem Source #
windowStart ∷ ∀ {kelem} (elem ∷ kelem) outer inner. Contains elem outer inner → Index outer elem Source #
withSuffixWindow ∷ ∀ {kelem} {klbl} outer (elem ∷ kelem) (lbl ∷ klbl). Size outer elem → Lbl lbl → Index outer elem → SomeWindow lbl outer elem Source #
withSuffixWindow outerSz lbl i is the window between indices i and the
end of the containing sequence of length outerSz with name lbl.
withTopWindow ∷ ∀ {k1} {k2} (lbl ∷ k1) (elem ∷ k2) ans. Lbl lbl → Int → (∀ base. Proxy base → SomeWindow lbl base elem → ans) → ans Source #
withTopWindow lbl sz k passes to k a window of size sz with name
lbl at offset 0 of some containing sequence with a unique name base.
withWindow ∷ ∀ {kelem} {klbl} outer (elem ∷ kelem) (lbl ∷ klbl) x. Size outer elem → Lbl lbl → Index outer elem → Size x elem → SomeWindow lbl outer elem Source #
withWindow outerSz lbl offset innerSz is a window of length innerSz
with name lbl starting at offset in a sequence with length outerSz.
If the window doesn't fit in the containing sequence, it is clipped so the resulting (possibly empty) window is contained.
Note that the window can spill either on the right if i + innerSz > outerSz,
or it can spill on the left if i < 0, or it can spill on both sides
simultaneously.
withWindowBetween ∷ ∀ {kelem} {klbl} outer (elem ∷ kelem) (lbl ∷ klbl). Size outer elem → Lbl lbl → Index outer elem → Index outer elem → SomeWindow lbl outer elem Source #
withWindowBetween outerSz lbl i j is the window between indices i
and j with name lbl in a containing sequence of length outerSz.
vectors
newtype MVector (base ∷ k) (elem ∷ k1) s a Source #
A type-indexed vector carrying values of a container
baseis a type-level name identifying the container (e.g.Win (Lbl HonestLbl) skolem1)elemis a type-level name of the elements in the container (e.g.SlotE)
createV ∷ ∀ {k1} {k2} a (base ∷ k1) (elem ∷ k2). Unbox a ⇒ (∀ s. ST s (MVector base elem s a)) → Vector base elem a Source #
getMVector ∷ ∀ {k1} {k2} (base ∷ k1) (elem ∷ k2) s a. MVector base elem s a → MVector s a Source #
lengthMV ∷ ∀ {kelem} a base (elem ∷ kelem) s. Unbox a ⇒ MVector base elem s a → Size base elem Source #
modifyMV ∷ ∀ {kelem} a base (elem ∷ kelem) s. Unbox a ⇒ MVector base elem s a → (a → a) → Index base elem → ST s () Source #
readMV ∷ ∀ {kelem} a base (elem ∷ kelem) s. Unbox a ⇒ MVector base elem s a → Index base elem → ST s a Source #
readV ∷ ∀ {kelem} a base (elem ∷ kelem). Unbox a ⇒ Vector base elem a → Index base elem → a Source #
replicateMV ∷ ∀ {k} a base (elem ∷ k) s. Unbox a ⇒ Size base elem → ST s a → ST s (MVector base elem s a) Source #
sliceMV ∷ ∀ {k} a (elem ∷ k) outer inner s. Unbox a ⇒ Contains elem outer inner → MVector outer elem s a → MVector inner elem s a Source #
sliceV ∷ ∀ {k} a (elem ∷ k) outer inner. Unbox a ⇒ Contains elem outer inner → Vector outer elem a → Vector inner elem a Source #
unsafeThawV ∷ ∀ {k1} {k2} a (base ∷ k1) (elem ∷ k2) s. Unbox a ⇒ Vector base elem a → ST s (MVector base elem s a) Source #
writeMV ∷ ∀ {kelem} a base (elem ∷ kelem) s. Unbox a ⇒ MVector base elem s a → Index base elem → a → ST s () Source #
variables
joinVar ∷ ∀ {k} {kelem} base (elem ∷ k) s a (x ∷ kelem). MVector base elem s a → Var a x → Var base x Source #
A count of things in an element can be lifted to a count of things in a vector