Copyright | Gautier DI FOLCO |
---|---|
License | ISC |
Maintainer | Gautier DI FOLCO <gautier.difolco@gmail.com> |
Stability | Stable |
Portability | Portable |
Safe Haskell | Safe-Inferred |
Language | Haskell2010 |
Control.Antikythera.Periodicity
Description
Defining a Periodicity
, how often/when an event occurs
Synopsis
- data Periodicity a = Periodicity {
- includes :: a -> Bool
- nextPeriod :: a -> Maybe a
- nextPeriods :: Periodicity a -> a -> [a]
- never :: Periodicity a
- always :: (a -> a) -> Periodicity a
- (.&&) :: Ord a => Periodicity a -> Periodicity a -> Periodicity a
- (.||) :: Ord a => Periodicity a -> Periodicity a -> Periodicity a
- allOf :: Ord a => NonEmpty (Periodicity a) -> Periodicity a
- anyOf :: Ord a => NonEmpty (Periodicity a) -> Periodicity a
- allOf' :: (Foldable f, Ord a) => (a -> a) -> f (Periodicity a) -> Periodicity a
- anyOf' :: (Foldable f, Ord a) => f (Periodicity a) -> Periodicity a
- at :: Eq i => i -> Unit i a -> Periodicity a
- ats :: Ord i => NonEmpty i -> Unit i a -> Periodicity a
- every :: Integral i => i -> Unit i a -> Periodicity a
- inclusiveRange :: (Enum i, Ord i) => Min i -> Max i -> Unit i a -> Periodicity a
- sinceInclusive :: Ord a => (a -> a) -> a -> Periodicity a
- untilInclusive :: Ord a => (a -> a) -> a -> Periodicity a
- newtype Max a = Max {
- getMax :: a
- newtype Min a = Min {
- getMin :: a
Documentation
data Periodicity a Source #
Event recurring period
Are we at 17:*
?
(at 17 hour).includes now
Next *:05
(at 5 minute).nextPeriod now
Constructors
Periodicity | |
Fields
|
nextPeriods :: Periodicity a -> a -> [a] Source #
Get a poentially infinite list of upcoming event
Warning: may loop infinitelly
Base helpers
never :: Periodicity a Source #
Never happen
Arguments
:: (a -> a) | Increment to next value |
-> Periodicity a |
Always happen
Going from minute to minute:
always (addUTCTime $ secondsToNominalDiffTime 60)
Combinators
(.&&) :: Ord a => Periodicity a -> Periodicity a -> Periodicity a infixr 3 Source #
Intersection of two periods
Everyday at 15:15
at 15 hour .&& at 15 minute
Warning: may loop infinitelly when impossible constraints, e.g.
at 15 minutes .&& at 15 minute
(.||) :: Ord a => Periodicity a -> Periodicity a -> Periodicity a infixr 2 Source #
Union of two periods
Everyday at 15:*
or every hour at *:15
at 15 hour .|| at 15 minute
allOf :: Ord a => NonEmpty (Periodicity a) -> Periodicity a Source #
Intersections of all periods
Same as
allOf = foldl1 (.&&)
Warning: may loop infinitelly when impossible constraints, see (.&&)
anyOf :: Ord a => NonEmpty (Periodicity a) -> Periodicity a Source #
Unions of all periods
Same as
anyOf = foldl1 (.||)
allOf' :: (Foldable f, Ord a) => (a -> a) -> f (Periodicity a) -> Periodicity a Source #
Intersections of all periods
Same as
allOf' = foldl (.&&) . always
Warning: may loop infinitelly when impossible constraints, see (.&&)
anyOf' :: (Foldable f, Ord a) => f (Periodicity a) -> Periodicity a Source #
Unions of all periods
Same as
anyOf' = foldl (.||) never
Unit
-based builders
ats :: Ord i => NonEmpty i -> Unit i a -> Periodicity a Source #
Happens when the Unit
has one of the values
Every hour at *:05
and *:35
ats [5, 35] minute
Equivalent to
at 5 minute .|| at 35 minute
every :: Integral i => i -> Unit i a -> Periodicity a Source #
Happens when the Unit
has a value with a modulo
Every hour at *:00
, *:15
, *:30
, and *:45
every 15 minute
inclusiveRange :: (Enum i, Ord i) => Min i -> Max i -> Unit i a -> Periodicity a Source #
Happens when the Unit
has a value in an inclusive range
Every hour at *:05
, *:06
, *:07
, *:08
, *:09
, *:10
inclusiveRange (Min 5) (Max 10) minute
Absolute builders
Arguments
:: Ord a | |
=> (a -> a) | Increment to next value |
-> a | |
-> Periodicity a |
An event only hapenning since
Arguments
:: Ord a | |
=> (a -> a) | Increment to next value |
-> a | |
-> Periodicity a |
An event only hapenning until
Reexports
Instances
MonadFix Max | Since: base-4.9.0.0 |
Defined in Data.Semigroup | |
Foldable Max | Since: base-4.9.0.0 |
Defined in Data.Semigroup Methods fold :: Monoid m => Max m -> m # foldMap :: Monoid m => (a -> m) -> Max a -> m # foldMap' :: Monoid m => (a -> m) -> Max a -> m # foldr :: (a -> b -> b) -> b -> Max a -> b # foldr' :: (a -> b -> b) -> b -> Max a -> b # foldl :: (b -> a -> b) -> b -> Max a -> b # foldl' :: (b -> a -> b) -> b -> Max a -> b # foldr1 :: (a -> a -> a) -> Max a -> a # foldl1 :: (a -> a -> a) -> Max a -> a # elem :: Eq a => a -> Max a -> Bool # maximum :: Ord a => Max a -> a # | |
Traversable Max | Since: base-4.9.0.0 |
Applicative Max | Since: base-4.9.0.0 |
Functor Max | Since: base-4.9.0.0 |
Monad Max | Since: base-4.9.0.0 |
Generic1 Max | |
Data a => Data (Max a) | Since: base-4.9.0.0 |
Defined in Data.Semigroup Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Max a -> c (Max a) # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Max a) # dataTypeOf :: Max a -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (Max a)) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Max a)) # gmapT :: (forall b. Data b => b -> b) -> Max a -> Max a # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Max a -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Max a -> r # gmapQ :: (forall d. Data d => d -> u) -> Max a -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Max a -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Max a -> m (Max a) # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Max a -> m (Max a) # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Max a -> m (Max a) # | |
(Ord a, Bounded a) => Monoid (Max a) | Since: base-4.9.0.0 |
Ord a => Semigroup (Max a) | Since: base-4.9.0.0 |
Bounded a => Bounded (Max a) | Since: base-4.9.0.0 |
Enum a => Enum (Max a) | Since: base-4.9.0.0 |
Generic (Max a) | |
Num a => Num (Max a) | Since: base-4.9.0.0 |
Read a => Read (Max a) | Since: base-4.9.0.0 |
Show a => Show (Max a) | Since: base-4.9.0.0 |
Eq a => Eq (Max a) | Since: base-4.9.0.0 |
Ord a => Ord (Max a) | Since: base-4.9.0.0 |
type Rep1 Max | Since: base-4.9.0.0 |
Defined in Data.Semigroup | |
type Rep (Max a) | Since: base-4.9.0.0 |
Defined in Data.Semigroup |
Instances
MonadFix Min | Since: base-4.9.0.0 |
Defined in Data.Semigroup | |
Foldable Min | Since: base-4.9.0.0 |
Defined in Data.Semigroup Methods fold :: Monoid m => Min m -> m # foldMap :: Monoid m => (a -> m) -> Min a -> m # foldMap' :: Monoid m => (a -> m) -> Min a -> m # foldr :: (a -> b -> b) -> b -> Min a -> b # foldr' :: (a -> b -> b) -> b -> Min a -> b # foldl :: (b -> a -> b) -> b -> Min a -> b # foldl' :: (b -> a -> b) -> b -> Min a -> b # foldr1 :: (a -> a -> a) -> Min a -> a # foldl1 :: (a -> a -> a) -> Min a -> a # elem :: Eq a => a -> Min a -> Bool # maximum :: Ord a => Min a -> a # | |
Traversable Min | Since: base-4.9.0.0 |
Applicative Min | Since: base-4.9.0.0 |
Functor Min | Since: base-4.9.0.0 |
Monad Min | Since: base-4.9.0.0 |
Generic1 Min | |
Data a => Data (Min a) | Since: base-4.9.0.0 |
Defined in Data.Semigroup Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Min a -> c (Min a) # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Min a) # dataTypeOf :: Min a -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (Min a)) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Min a)) # gmapT :: (forall b. Data b => b -> b) -> Min a -> Min a # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Min a -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Min a -> r # gmapQ :: (forall d. Data d => d -> u) -> Min a -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Min a -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Min a -> m (Min a) # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Min a -> m (Min a) # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Min a -> m (Min a) # | |
(Ord a, Bounded a) => Monoid (Min a) | Since: base-4.9.0.0 |
Ord a => Semigroup (Min a) | Since: base-4.9.0.0 |
Bounded a => Bounded (Min a) | Since: base-4.9.0.0 |
Enum a => Enum (Min a) | Since: base-4.9.0.0 |
Generic (Min a) | |
Num a => Num (Min a) | Since: base-4.9.0.0 |
Read a => Read (Min a) | Since: base-4.9.0.0 |
Show a => Show (Min a) | Since: base-4.9.0.0 |
Eq a => Eq (Min a) | Since: base-4.9.0.0 |
Ord a => Ord (Min a) | Since: base-4.9.0.0 |
type Rep1 Min | Since: base-4.9.0.0 |
Defined in Data.Semigroup | |
type Rep (Min a) | Since: base-4.9.0.0 |
Defined in Data.Semigroup |