Safe Haskell | None |
---|---|
Language | GHC2021 |
Polysemy.Time
Description
This package provides a Polysemy effect for interacting with the current time and sleeping, as well as some time-related data types and classes.
Synopsis
- module Polysemy.Time.Effect.Time
- type GhcTime = Time UTCTime Day
- interpretTimeGhc :: forall (r :: EffectRow). Member (Embed IO) r => InterpreterFor GhcTime r
- interpretTimeGhcAt :: forall (r :: EffectRow). Member (Embed IO) r => UTCTime -> InterpreterFor GhcTime r
- interpretTimeGhcConstant :: forall (r :: EffectRow). Member (Embed IO) r => UTCTime -> InterpreterFor GhcTime r
- interpretTimeGhcConstantNow :: forall (r :: EffectRow). Member (Embed IO) r => InterpreterFor GhcTime r
- convert :: (TimeUnit a, TimeUnit b) => a -> b
- class TimeUnit u
- newtype Days = Days {}
- newtype Hours = Hours {}
- newtype MicroSeconds = MicroSeconds {}
- newtype MilliSeconds = MilliSeconds {}
- newtype Minutes = Minutes {}
- newtype Months = Months {}
- newtype NanoSeconds = NanoSeconds {}
- newtype Seconds = Seconds {}
- newtype Weeks = Weeks {}
- newtype Years = Years {}
- class Calendar dt where
- type CalendarDate dt
- type CalendarTime dt
- mkDate :: Int64 -> Int64 -> Int64 -> CalendarDate dt
- mkTime :: Int64 -> Int64 -> Int64 -> CalendarTime dt
- mkDatetime :: Int64 -> Int64 -> Int64 -> Int64 -> Int64 -> Int64 -> dt
- class HasDay t where
- class HasHour t where
- class HasMinute t where
- class HasMonth t where
- class HasNanoSecond t where
- nanoSecond :: t -> NanoSeconds
- class HasSecond t where
- class HasYear t where
- measure :: forall dt t d u (r :: EffectRow) a. (TimeUnit u, Torsor dt u, Instant t dt, Member (Time t d) r) => Sem r a -> Sem r (u, a)
- while :: forall t d u (r :: EffectRow). (Member (Time t d) r, TimeUnit u) => u -> Sem r Bool -> Sem r ()
- untilJust :: forall t d u (r :: EffectRow) a. (Member (Time t d) r, TimeUnit u) => u -> Sem r (Maybe a) -> Sem r a
- loop :: forall t d u a (r :: EffectRow). (Member (Time t d) r, TimeUnit u) => u -> a -> (a -> Sem r a) -> Sem r ()
- loop_ :: forall t d u (r :: EffectRow). (Member (Time t d) r, TimeUnit u) => u -> Sem r () -> Sem r ()
- diff :: forall dt u i1 i2 diff. (TimeUnit diff, TimeUnit u, Torsor dt diff, Instant i1 dt, Instant i2 dt) => i1 -> i2 -> u
- since :: forall u t d dt diff (r :: EffectRow). (TimeUnit diff, TimeUnit u, Instant t dt, Torsor dt diff, Member (Time t d) r) => t -> Sem r u
Documentation
import Data.Time (UTCTime) import Polysemy (Members, runM) import Polysemy.Chronos (interpretTimeChronos) import qualified Polysemy.Time as Time import Polysemy.Time (MilliSeconds(MilliSeconds), Seconds(Seconds), Time, interpretTimeGhcAt, mkDatetime, year) prog :: Ord t => Member (Time t d) r => Sem r () prog = do time1 <- Time.now Time.sleep (MilliSeconds 10) time2 <- Time.now print (time1 < time2) -- True testTime :: UTCTime testTime = mkDatetime 1845 12 31 23 59 59 main :: IO () main = runM do interpretTimeChronos prog interpretTimeGhcAt testTime do Time.sleep (Seconds 1) time <- Time.now print (year time) -- Years { unYear = 1846 }
module Polysemy.Time.Effect.Time
Interpreters
interpretTimeGhc :: forall (r :: EffectRow). Member (Embed IO) r => InterpreterFor GhcTime r Source #
interpretTimeGhcAt :: forall (r :: EffectRow). Member (Embed IO) r => UTCTime -> InterpreterFor GhcTime r Source #
interpretTimeGhcConstant :: forall (r :: EffectRow). Member (Embed IO) r => UTCTime -> InterpreterFor GhcTime r Source #
interpretTimeGhcConstantNow :: forall (r :: EffectRow). Member (Embed IO) r => InterpreterFor GhcTime r Source #
Data types
convert :: (TimeUnit a, TimeUnit b) => a -> b Source #
Convert between different time spans.
>>>
convert (picosecondsToDiffTime 50000000) :: MicroSeconds
MicroSeconds {unMicroSeconds = 50}
>>>
convert (MilliSeconds 5) :: MicroSeconds
MicroSeconds 5000
Types that represent an amount of time that can be converted to each other.
The methods are internal, the API function is convert
.
Minimal complete definition
Instances
Days.
Instances
FromJSON Days Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit | |||||
ToJSON Days Source # | |||||
Enum Days Source # | |||||
Generic Days Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit Associated Types
| |||||
Num Days Source # | |||||
Integral Days Source # | |||||
Real Days Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit Methods toRational :: Days -> Rational # | |||||
Show Days Source # | |||||
Eq Days Source # | |||||
Ord Days Source # | |||||
TimeUnit Days Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit Methods nanos :: NanoSeconds Source # toNanos :: Days -> NanoSeconds Source # fromNanos :: NanoSeconds -> Days Source # | |||||
Additive Days Source # | |||||
type Rep Days Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit |
Hours.
Instances
FromJSON Hours Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit | |||||
ToJSON Hours Source # | |||||
Enum Hours Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit | |||||
Generic Hours Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit Associated Types
| |||||
Num Hours Source # | |||||
Integral Hours Source # | |||||
Real Hours Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit Methods toRational :: Hours -> Rational # | |||||
Show Hours Source # | |||||
Eq Hours Source # | |||||
Ord Hours Source # | |||||
TimeUnit Hours Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit Methods nanos :: NanoSeconds Source # toNanos :: Hours -> NanoSeconds Source # fromNanos :: NanoSeconds -> Hours Source # | |||||
Additive Hours Source # | |||||
type Rep Hours Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit |
newtype MicroSeconds Source #
Microseconds.
Constructors
MicroSeconds | |
Fields |
Instances
newtype MilliSeconds Source #
Milliseconds.
Constructors
MilliSeconds | |
Fields |
Instances
FromJSON MilliSeconds Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit | |||||
ToJSON MilliSeconds Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit Methods toJSON :: MilliSeconds -> Value # toEncoding :: MilliSeconds -> Encoding # toJSONList :: [MilliSeconds] -> Value # toEncodingList :: [MilliSeconds] -> Encoding # omitField :: MilliSeconds -> Bool # | |||||
Enum MilliSeconds Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit Methods succ :: MilliSeconds -> MilliSeconds # pred :: MilliSeconds -> MilliSeconds # toEnum :: Int -> MilliSeconds # fromEnum :: MilliSeconds -> Int # enumFrom :: MilliSeconds -> [MilliSeconds] # enumFromThen :: MilliSeconds -> MilliSeconds -> [MilliSeconds] # enumFromTo :: MilliSeconds -> MilliSeconds -> [MilliSeconds] # enumFromThenTo :: MilliSeconds -> MilliSeconds -> MilliSeconds -> [MilliSeconds] # | |||||
Generic MilliSeconds Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit Associated Types
| |||||
Num MilliSeconds Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit Methods (+) :: MilliSeconds -> MilliSeconds -> MilliSeconds # (-) :: MilliSeconds -> MilliSeconds -> MilliSeconds # (*) :: MilliSeconds -> MilliSeconds -> MilliSeconds # negate :: MilliSeconds -> MilliSeconds # abs :: MilliSeconds -> MilliSeconds # signum :: MilliSeconds -> MilliSeconds # fromInteger :: Integer -> MilliSeconds # | |||||
Fractional MilliSeconds Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit Methods (/) :: MilliSeconds -> MilliSeconds -> MilliSeconds # recip :: MilliSeconds -> MilliSeconds # fromRational :: Rational -> MilliSeconds # | |||||
Integral MilliSeconds Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit Methods quot :: MilliSeconds -> MilliSeconds -> MilliSeconds # rem :: MilliSeconds -> MilliSeconds -> MilliSeconds # div :: MilliSeconds -> MilliSeconds -> MilliSeconds # mod :: MilliSeconds -> MilliSeconds -> MilliSeconds # quotRem :: MilliSeconds -> MilliSeconds -> (MilliSeconds, MilliSeconds) # divMod :: MilliSeconds -> MilliSeconds -> (MilliSeconds, MilliSeconds) # toInteger :: MilliSeconds -> Integer # | |||||
Real MilliSeconds Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit Methods toRational :: MilliSeconds -> Rational # | |||||
Show MilliSeconds Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit Methods showsPrec :: Int -> MilliSeconds -> ShowS # show :: MilliSeconds -> String # showList :: [MilliSeconds] -> ShowS # | |||||
Eq MilliSeconds Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit | |||||
Ord MilliSeconds Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit Methods compare :: MilliSeconds -> MilliSeconds -> Ordering # (<) :: MilliSeconds -> MilliSeconds -> Bool # (<=) :: MilliSeconds -> MilliSeconds -> Bool # (>) :: MilliSeconds -> MilliSeconds -> Bool # (>=) :: MilliSeconds -> MilliSeconds -> Bool # max :: MilliSeconds -> MilliSeconds -> MilliSeconds # min :: MilliSeconds -> MilliSeconds -> MilliSeconds # | |||||
TimeUnit MilliSeconds Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit Methods nanos :: NanoSeconds Source # toNanos :: MilliSeconds -> NanoSeconds Source # fromNanos :: NanoSeconds -> MilliSeconds Source # | |||||
Additive MilliSeconds Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit Methods zero :: MilliSeconds # invert :: MilliSeconds -> MilliSeconds # plus :: MilliSeconds -> MilliSeconds -> MilliSeconds # minus :: MilliSeconds -> MilliSeconds -> MilliSeconds # | |||||
type Rep MilliSeconds Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit type Rep MilliSeconds = D1 ('MetaData "MilliSeconds" "Polysemy.Time.Data.TimeUnit" "polysemy-time-0.7.0.1-JuShpFGkFIKBk6OfIeQaxf" 'True) (C1 ('MetaCons "MilliSeconds" 'PrefixI 'True) (S1 ('MetaSel ('Just "unMilliSeconds") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Int64))) |
Minutes.
Instances
FromJSON Minutes Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit | |||||
ToJSON Minutes Source # | |||||
Enum Minutes Source # | |||||
Generic Minutes Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit Associated Types
| |||||
Num Minutes Source # | |||||
Integral Minutes Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit | |||||
Real Minutes Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit Methods toRational :: Minutes -> Rational # | |||||
Show Minutes Source # | |||||
Eq Minutes Source # | |||||
Ord Minutes Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit | |||||
TimeUnit Minutes Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit Methods nanos :: NanoSeconds Source # toNanos :: Minutes -> NanoSeconds Source # fromNanos :: NanoSeconds -> Minutes Source # | |||||
Additive Minutes Source # | |||||
type Rep Minutes Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit |
Months.
Instances
FromJSON Months Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit | |||||
ToJSON Months Source # | |||||
Enum Months Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit | |||||
Generic Months Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit Associated Types
| |||||
Num Months Source # | |||||
Integral Months Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit | |||||
Real Months Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit Methods toRational :: Months -> Rational # | |||||
Show Months Source # | |||||
Eq Months Source # | |||||
Ord Months Source # | |||||
Additive Months Source # | |||||
type Rep Months Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit |
newtype NanoSeconds Source #
Nanoseconds. This is the base unit for all conversions.
Constructors
NanoSeconds | |
Fields |
Instances
FromJSON NanoSeconds Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit | |||||
ToJSON NanoSeconds Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit Methods toJSON :: NanoSeconds -> Value # toEncoding :: NanoSeconds -> Encoding # toJSONList :: [NanoSeconds] -> Value # toEncodingList :: [NanoSeconds] -> Encoding # omitField :: NanoSeconds -> Bool # | |||||
Enum NanoSeconds Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit Methods succ :: NanoSeconds -> NanoSeconds # pred :: NanoSeconds -> NanoSeconds # toEnum :: Int -> NanoSeconds # fromEnum :: NanoSeconds -> Int # enumFrom :: NanoSeconds -> [NanoSeconds] # enumFromThen :: NanoSeconds -> NanoSeconds -> [NanoSeconds] # enumFromTo :: NanoSeconds -> NanoSeconds -> [NanoSeconds] # enumFromThenTo :: NanoSeconds -> NanoSeconds -> NanoSeconds -> [NanoSeconds] # | |||||
Generic NanoSeconds Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit Associated Types
| |||||
Num NanoSeconds Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit Methods (+) :: NanoSeconds -> NanoSeconds -> NanoSeconds # (-) :: NanoSeconds -> NanoSeconds -> NanoSeconds # (*) :: NanoSeconds -> NanoSeconds -> NanoSeconds # negate :: NanoSeconds -> NanoSeconds # abs :: NanoSeconds -> NanoSeconds # signum :: NanoSeconds -> NanoSeconds # fromInteger :: Integer -> NanoSeconds # | |||||
Fractional NanoSeconds Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit Methods (/) :: NanoSeconds -> NanoSeconds -> NanoSeconds # recip :: NanoSeconds -> NanoSeconds # fromRational :: Rational -> NanoSeconds # | |||||
Integral NanoSeconds Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit Methods quot :: NanoSeconds -> NanoSeconds -> NanoSeconds # rem :: NanoSeconds -> NanoSeconds -> NanoSeconds # div :: NanoSeconds -> NanoSeconds -> NanoSeconds # mod :: NanoSeconds -> NanoSeconds -> NanoSeconds # quotRem :: NanoSeconds -> NanoSeconds -> (NanoSeconds, NanoSeconds) # divMod :: NanoSeconds -> NanoSeconds -> (NanoSeconds, NanoSeconds) # toInteger :: NanoSeconds -> Integer # | |||||
Real NanoSeconds Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit Methods toRational :: NanoSeconds -> Rational # | |||||
Show NanoSeconds Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit Methods showsPrec :: Int -> NanoSeconds -> ShowS # show :: NanoSeconds -> String # showList :: [NanoSeconds] -> ShowS # | |||||
Eq NanoSeconds Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit | |||||
Ord NanoSeconds Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit Methods compare :: NanoSeconds -> NanoSeconds -> Ordering # (<) :: NanoSeconds -> NanoSeconds -> Bool # (<=) :: NanoSeconds -> NanoSeconds -> Bool # (>) :: NanoSeconds -> NanoSeconds -> Bool # (>=) :: NanoSeconds -> NanoSeconds -> Bool # max :: NanoSeconds -> NanoSeconds -> NanoSeconds # min :: NanoSeconds -> NanoSeconds -> NanoSeconds # | |||||
TimeUnit NanoSeconds Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit Methods nanos :: NanoSeconds Source # toNanos :: NanoSeconds -> NanoSeconds Source # fromNanos :: NanoSeconds -> NanoSeconds Source # | |||||
Additive NanoSeconds Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit Methods zero :: NanoSeconds # invert :: NanoSeconds -> NanoSeconds # plus :: NanoSeconds -> NanoSeconds -> NanoSeconds # minus :: NanoSeconds -> NanoSeconds -> NanoSeconds # | |||||
Scaling NanoSeconds Int64 Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit Methods scale :: Int64 -> NanoSeconds -> NanoSeconds # | |||||
type Rep NanoSeconds Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit type Rep NanoSeconds = D1 ('MetaData "NanoSeconds" "Polysemy.Time.Data.TimeUnit" "polysemy-time-0.7.0.1-JuShpFGkFIKBk6OfIeQaxf" 'True) (C1 ('MetaCons "NanoSeconds" 'PrefixI 'True) (S1 ('MetaSel ('Just "unNanoSeconds") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Int64))) |
Seconds.
Instances
FromJSON Seconds Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit | |||||
ToJSON Seconds Source # | |||||
Enum Seconds Source # | |||||
Generic Seconds Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit Associated Types
| |||||
Num Seconds Source # | |||||
Integral Seconds Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit | |||||
Real Seconds Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit Methods toRational :: Seconds -> Rational # | |||||
Show Seconds Source # | |||||
Eq Seconds Source # | |||||
Ord Seconds Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit | |||||
TimeUnit Seconds Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit Methods nanos :: NanoSeconds Source # toNanos :: Seconds -> NanoSeconds Source # fromNanos :: NanoSeconds -> Seconds Source # | |||||
Additive Seconds Source # | |||||
type Rep Seconds Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit |
Weeks.
Instances
FromJSON Weeks Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit | |||||
ToJSON Weeks Source # | |||||
Enum Weeks Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit | |||||
Generic Weeks Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit Associated Types
| |||||
Num Weeks Source # | |||||
Integral Weeks Source # | |||||
Real Weeks Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit Methods toRational :: Weeks -> Rational # | |||||
Show Weeks Source # | |||||
Eq Weeks Source # | |||||
Ord Weeks Source # | |||||
TimeUnit Weeks Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit Methods nanos :: NanoSeconds Source # toNanos :: Weeks -> NanoSeconds Source # fromNanos :: NanoSeconds -> Weeks Source # | |||||
Additive Weeks Source # | |||||
type Rep Weeks Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit |
Years.
Instances
FromJSON Years Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit | |||||
ToJSON Years Source # | |||||
Enum Years Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit | |||||
Generic Years Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit Associated Types
| |||||
Num Years Source # | |||||
Integral Years Source # | |||||
Real Years Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit Methods toRational :: Years -> Rational # | |||||
Show Years Source # | |||||
Eq Years Source # | |||||
Ord Years Source # | |||||
Additive Years Source # | |||||
type Rep Years Source # | |||||
Defined in Polysemy.Time.Data.TimeUnit |
class Calendar dt where Source #
Construct datetimes, dates or times from integers.
Methods
mkDate :: Int64 -> Int64 -> Int64 -> CalendarDate dt Source #
mkTime :: Int64 -> Int64 -> Int64 -> CalendarTime dt Source #
mkDatetime :: Int64 -> Int64 -> Int64 -> Int64 -> Int64 -> Int64 -> dt Source #
Instances
Calendar UTCTime Source # | |||||||||
Defined in Polysemy.Time.Calendar Associated Types
|
Extract the day component from a date.
class HasNanoSecond t where Source #
Extract the nanosecond component from a datetime or time.
Methods
nanoSecond :: t -> NanoSeconds Source #
Instances
HasNanoSecond DiffTime Source # | |
Defined in Polysemy.Time.Calendar Methods nanoSecond :: DiffTime -> NanoSeconds Source # | |
HasNanoSecond TimeOfDay Source # | |
Defined in Polysemy.Time.Calendar Methods nanoSecond :: TimeOfDay -> NanoSeconds Source # |
Combinators
measure :: forall dt t d u (r :: EffectRow) a. (TimeUnit u, Torsor dt u, Instant t dt, Member (Time t d) r) => Sem r a -> Sem r (u, a) Source #
while :: forall t d u (r :: EffectRow). (Member (Time t d) r, TimeUnit u) => u -> Sem r Bool -> Sem r () Source #
Repeatedly run the action
, sleeping for interval
between executions.
Stops when action
returns False
.
untilJust :: forall t d u (r :: EffectRow) a. (Member (Time t d) r, TimeUnit u) => u -> Sem r (Maybe a) -> Sem r a Source #
Repeatedly run the action
, sleeping for interval
between executions.
Stops when action
returns Just a
, returning the contained a
.
loop :: forall t d u a (r :: EffectRow). (Member (Time t d) r, TimeUnit u) => u -> a -> (a -> Sem r a) -> Sem r () Source #
Repeatedly run the action
, sleeping for interval
between executions.
The result of action
is passed back to it for the next run, starting with initial
.
loop_ :: forall t d u (r :: EffectRow). (Member (Time t d) r, TimeUnit u) => u -> Sem r () -> Sem r () Source #
Repeatedly run the action
, sleeping for interval
between executions.