Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Synopsis
- newtype StepCounter (n ∷ Nat) s = StepCounter (MutablePrimArray s Word8)
- newCounter ∷ (KnownNat n, PrimMonad m) ⇒ Proxy n → m (StepCounter n (PrimState m))
- resetCounter ∷ ∀ n m. (KnownNat n, PrimMonad m) ⇒ StepCounter n (PrimState m) → m ()
- readCounter ∷ ∀ m n. PrimMonad m ⇒ StepCounter n (PrimState m) → Int → m Word8
- writeCounter ∷ ∀ m n. PrimMonad m ⇒ StepCounter n (PrimState m) → Int → Word8 → m ()
- modifyCounter ∷ PrimMonad m ⇒ Int → (Word8 → Word8) → StepCounter n (PrimState m) → m Word8
- data Peano
- type family NatToPeano n where ...
- class Applicative f ⇒ UpwardsM f n where
- itraverseCounter_ ∷ ∀ n m. (UpwardsM m (NatToPeano n), PrimMonad m) ⇒ (Int → Word8 → m ()) → StepCounter n (PrimState m) → m ()
- iforCounter_ ∷ (UpwardsM m (NatToPeano n), PrimMonad m) ⇒ StepCounter n (PrimState m) → (Int → Word8 → m ()) → m ()
Documentation
newtype StepCounter (n ∷ Nat) s Source #
A set of Word8
counters that is used in the CEK machine
to count steps.
newCounter ∷ (KnownNat n, PrimMonad m) ⇒ Proxy n → m (StepCounter n (PrimState m)) Source #
Make a new StepCounter
with the given number of counters.
resetCounter ∷ ∀ n m. (KnownNat n, PrimMonad m) ⇒ StepCounter n (PrimState m) → m () Source #
Reset all the counters in the given StepCounter
to zero.
readCounter ∷ ∀ m n. PrimMonad m ⇒ StepCounter n (PrimState m) → Int → m Word8 Source #
Read the value of a counter.
writeCounter ∷ ∀ m n. PrimMonad m ⇒ StepCounter n (PrimState m) → Int → Word8 → m () Source #
Write to a counter.
modifyCounter ∷ PrimMonad m ⇒ Int → (Word8 → Word8) → StepCounter n (PrimState m) → m Word8 Source #
Modify the value of a counter. Returns the modified value.
type family NatToPeano n where ... Source #
NatToPeano 0 = 'Z | |
NatToPeano n = 'S (NatToPeano (n - 1)) |
class Applicative f ⇒ UpwardsM f n where Source #
upwardsM ∷ Int → (Int → f ()) → f () Source #
upwardsM i k
means k i *> k (i + 1) *> ... *> k (i + n - 1)
.
We use this function in order to statically unroll a loop in itraverseCounter_
through
instance resolution. This makes validation
benchmarks a couple of percent faster.
itraverseCounter_ ∷ ∀ n m. (UpwardsM m (NatToPeano n), PrimMonad m) ⇒ (Int → Word8 → m ()) → StepCounter n (PrimState m) → m () Source #
Traverse the counters with an effectful function.
iforCounter_ ∷ (UpwardsM m (NatToPeano n), PrimMonad m) ⇒ StepCounter n (PrimState m) → (Int → Word8 → m ()) → m () Source #
Traverse the counters with an effectful function.