module Data.HodaTime.Offset
(
Offset
,empty
,fromSeconds
,fromMinutes
,fromHours
,seconds
,minutes
,hours
,addClamped
,minusClamped
)
where
import Data.HodaTime.Offset.Internal
import Data.HodaTime.Internal (secondsFromMinutes, secondsFromHours, clamp, hoursFromSecs, minutesFromSecs, secondsFromSecs)
minOffsetHours :: Num a => a
minOffsetHours = negate maxOffsetHours
maxOffsetMinutes :: Num a => a
maxOffsetMinutes = maxOffsetHours * 60
minOffsetMinutes :: Num a => a
minOffsetMinutes = negate maxOffsetMinutes
fromMinutes :: Integral a => a -> Offset
fromMinutes = Offset . secondsFromMinutes . clamp minOffsetMinutes maxOffsetMinutes
fromHours :: Integral a => a -> Offset
fromHours = Offset . secondsFromHours . clamp minOffsetHours maxOffsetHours
seconds :: Functor f => (Int -> f Int) -> Offset -> f Offset
seconds f (Offset secs) = secondsFromSecs fromSeconds f secs
{-# INLINE seconds #-}
minutes :: Functor f => (Int -> f Int) -> Offset -> f Offset
minutes f (Offset secs) = minutesFromSecs fromSeconds f secs
{-# INLINE minutes #-}
hours :: Functor f => (Int -> f Int) -> Offset -> f Offset
hours f (Offset secs) = hoursFromSecs fromSeconds f secs
{-# INLINE hours #-}