packages feed

effectful-cli-0.1.0.0: src/Effectful/CLI/Time.hs

module Effectful.CLI.Time (
  getLocalTimeIO,
  getBeginningOfDayIO,
  getBeginningOfWeekIO,
  getLocalTime,
  getBeginningOfDay,
  getBeginningOfWeek,
) where

import Data.Time
import Effectful (Eff, IOE, liftIO, (:>))

-- | @since 0.1.0.0
getLocalTimeIO :: IO LocalTime
getLocalTimeIO = utcToLocalTime <$> getCurrentTimeZone <*> getCurrentTime

-- | @since 0.1.0.0
getBeginningOfDayIO :: IO UTCTime
getBeginningOfDayIO = (\now -> now{utctDayTime = 0}) <$> getCurrentTime

-- | @since 0.1.0.0
getBeginningOfWeekIO :: IO UTCTime
getBeginningOfWeekIO = (\now -> UTCTime (weekFirstDay Monday (utctDay now)) 0) <$> getCurrentTime

-- | @since 0.1.0.0
getLocalTime :: IOE :> es => Eff es LocalTime
getLocalTime = liftIO getLocalTimeIO

-- | @since 0.1.0.0
getBeginningOfDay :: IOE :> es => Eff es UTCTime
getBeginningOfDay = liftIO getBeginningOfDayIO

-- | @since 0.1.0.0
getBeginningOfWeek :: IOE :> es => Eff es UTCTime
getBeginningOfWeek = liftIO getBeginningOfWeekIO