{-# options_haddock prune #-}
module Polysemy.Chronos.Interpreter.Time where
import qualified Chronos
import Chronos (Timespan (Timespan), dateToDay, dayToDate, dayToTimeMidnight, timeToDayTruncate)
import Polysemy.Time.At (interceptTimeAt, interceptTimeConstant, interceptTimeConstantNow)
import qualified Polysemy.Time.Effect.Time as Core
import Polysemy.Time.Effect.Time (Time)
import Polysemy.Time.Sleep (tSleep)
import Polysemy.Chronos.Orphans ()
type ChronosTime =
Time Chronos.Time Chronos.Date
now ::
Member (Embed IO) r =>
Sem r Chronos.Time
now :: forall (r :: EffectRow). Member (Embed IO) r => Sem r Time
now =
IO Time -> Sem r Time
forall (m :: * -> *) (r :: EffectRow) a.
Member (Embed m) r =>
m a -> Sem r a
embed IO Time
Chronos.now
timeToDate :: Chronos.Time -> Chronos.Date
timeToDate :: Time -> Date
timeToDate =
Day -> Date
dayToDate (Day -> Date) -> (Time -> Day) -> Time -> Date
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Time -> Day
timeToDayTruncate
dateToTime :: Chronos.Date -> Chronos.Time
dateToTime :: Date -> Time
dateToTime =
Day -> Time
dayToTimeMidnight (Day -> Time) -> (Date -> Day) -> Date -> Time
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Date -> Day
dateToDay
interpretTimeChronos ::
Member (Embed IO) r =>
InterpreterFor ChronosTime r
interpretTimeChronos :: forall (r :: EffectRow).
Member (Embed IO) r =>
InterpreterFor ChronosTime r
interpretTimeChronos =
(forall (rInitial :: EffectRow) x.
ChronosTime (Sem rInitial) x -> Sem r x)
-> Sem (ChronosTime : r) a -> Sem r a
forall (e :: (* -> *) -> * -> *) (r :: EffectRow) a.
FirstOrder e "interpret" =>
(forall (rInitial :: EffectRow) x. e (Sem rInitial) x -> Sem r x)
-> Sem (e : r) a -> Sem r a
interpret \case
ChronosTime (Sem rInitial) x
Core.Now ->
Sem r x
Sem r Time
forall (r :: EffectRow). Member (Embed IO) r => Sem r Time
now
ChronosTime (Sem rInitial) x
Core.Today ->
Time -> x
Time -> Date
timeToDate (Time -> x) -> Sem r Time -> Sem r x
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Sem r Time
forall (r :: EffectRow). Member (Embed IO) r => Sem r Time
now
Core.Sleep u
t ->
u -> Sem r ()
forall (r :: EffectRow) t.
(Member (Embed IO) r, TimeUnit t) =>
t -> Sem r ()
tSleep u
t
Core.SetTime Time
_ ->
Sem r x
Sem r ()
forall (f :: * -> *). Applicative f => f ()
unit
Core.Adjust u1
_ ->
Sem r x
Sem r ()
forall (f :: * -> *). Applicative f => f ()
unit
Core.SetDate Date
_ ->
Sem r x
Sem r ()
forall (f :: * -> *). Applicative f => f ()
unit
{-# inline interpretTimeChronos #-}
interpretTimeChronosAt ::
Member (Embed IO) r =>
Chronos.Time ->
InterpreterFor ChronosTime r
interpretTimeChronosAt :: forall (r :: EffectRow).
Member (Embed IO) r =>
Time -> InterpreterFor ChronosTime r
interpretTimeChronosAt Time
t =
Sem (ChronosTime : r) a -> Sem r a
forall (r :: EffectRow).
Member (Embed IO) r =>
InterpreterFor ChronosTime r
InterpreterFor ChronosTime r
interpretTimeChronos (Sem (ChronosTime : r) a -> Sem r a)
-> (Sem (ChronosTime : r) a -> Sem (ChronosTime : r) a)
-> Sem (ChronosTime : r) a
-> Sem r a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall diff t d (r :: EffectRow) a.
(TimeUnit diff, Torsor t diff, HasDate t d,
Members '[Time t d, Embed IO] r) =>
t -> Sem r a -> Sem r a
interceptTimeAt @Timespan Time
t
{-# inline interpretTimeChronosAt #-}
interpretTimeChronosConstant ::
Member (Embed IO) r =>
Chronos.Time ->
InterpreterFor ChronosTime r
interpretTimeChronosConstant :: forall (r :: EffectRow).
Member (Embed IO) r =>
Time -> InterpreterFor ChronosTime r
interpretTimeChronosConstant Time
t =
Sem (ChronosTime : r) a -> Sem r a
forall (r :: EffectRow).
Member (Embed IO) r =>
InterpreterFor ChronosTime r
InterpreterFor ChronosTime r
interpretTimeChronos (Sem (ChronosTime : r) a -> Sem r a)
-> (Sem (ChronosTime : r) a -> Sem (ChronosTime : r) a)
-> Sem (ChronosTime : r) a
-> Sem r a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Time -> Sem (ChronosTime : r) a -> Sem (ChronosTime : r) a
forall t d diff (r :: EffectRow) a.
(Ord diff, HasDate t d, TimeUnit diff, Torsor t diff,
Members '[Time t d, Embed IO] r) =>
t -> Sem r a -> Sem r a
interceptTimeConstant Time
t
{-# inline interpretTimeChronosConstant #-}
interpretTimeChronosConstantNow ::
Member (Embed IO) r =>
InterpreterFor ChronosTime r
interpretTimeChronosConstantNow :: forall (r :: EffectRow).
Member (Embed IO) r =>
InterpreterFor ChronosTime r
interpretTimeChronosConstantNow =
Sem (ChronosTime : r) a -> Sem r a
forall (r :: EffectRow).
Member (Embed IO) r =>
InterpreterFor ChronosTime r
InterpreterFor ChronosTime r
interpretTimeChronos (Sem (ChronosTime : r) a -> Sem r a)
-> (Sem (ChronosTime : r) a -> Sem (ChronosTime : r) a)
-> Sem (ChronosTime : r) a
-> Sem r a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall t d diff (r :: EffectRow) a.
(Ord diff, HasDate t d, TimeUnit diff, Torsor t diff,
Members '[Time t d, Embed IO] r) =>
Sem r a -> Sem r a
interceptTimeConstantNow @Chronos.Time
{-# inline interpretTimeChronosConstantNow #-}
negateTimespan :: Timespan -> Timespan
negateTimespan :: Timespan -> Timespan
negateTimespan (Timespan Int64
t) =
Int64 -> Timespan
Timespan (-Int64
t)