module Data.Timeframe ( Timeframe, module Data.Interval, localTimeframeAt, localTimeframe, pureLocalTimeframe, duration, ) where import Data.Interval import Data.Time.Compat import GHC.IO (unsafePerformIO) -- | > type Timeframe = Interval UTCTime type Timeframe = Interval UTCTime localTimeframeAt :: TimeZone -> LocalTime -> LocalTime -> Timeframe localTimeframeAt = on (:||:) . localTimeToUTC localTimeframe :: (MonadIO io) => LocalTime -> LocalTime -> io Timeframe localTimeframe t1 t2 = liftIO getCurrentTimeZone <&> \tz -> localTimeframeAt tz t1 t2 pureLocalTimeframe :: LocalTime -> LocalTime -> Timeframe pureLocalTimeframe t1 t2 = let tz = unsafePerformIO getCurrentTimeZone in localTimeframeAt tz t1 t2 duration :: Timeframe -> Maybe NominalDiffTime duration = measuring diffUTCTime