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
base
is the type-level name of the container in which we are counting (e.g.Win (Lbl HonestLbl) skolem1
)elem
is the type-level name of the elements in the container (e.g.SlotE
)which
is 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).
elem
is a type-level name of the elements in the containing sequence (e.g.SlotE
)outer
is a type-level name identifying the containing sequence (e.g.Win (Lbl HonestLbl) skolem1
)inner
is 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
lbl
is a name component that can be used in multiple namesskolem
is 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
base
is a type-level name identifying the container (e.g.Win (Lbl HonestLbl) skolem1
)elem
is 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