om-time 0.3.0.5 → 0.3.1.0
raw patch · 2 files changed
+30/−3 lines, 2 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ OM.Time: data NowT (m :: Type -> Type) a
+ OM.Time: instance Control.Monad.Trans.Class.MonadTrans OM.Time.NowT
+ OM.Time: instance GHC.Internal.Base.Applicative m => GHC.Internal.Base.Applicative (OM.Time.NowT m)
+ OM.Time: instance GHC.Internal.Base.Functor m => GHC.Internal.Base.Functor (OM.Time.NowT m)
+ OM.Time: instance GHC.Internal.Base.Monad m => GHC.Internal.Base.Monad (OM.Time.NowT m)
+ OM.Time: instance GHC.Internal.Base.Monad m => OM.Time.MonadTimeSpec (OM.Time.NowT m)
+ OM.Time: runNowT :: TimeSpec -> NowT m a -> m a
Files
- om-time.cabal +1/−1
- src/OM/Time.hs +29/−2
om-time.cabal view
@@ -1,6 +1,6 @@ cabal-version: 3.0 name: om-time-version: 0.3.0.5+version: 0.3.1.0 synopsis: Misc. time utilites description: A monad interface for obtain the current TimeSpec, along with a few other utilities.
src/OM/Time.hs view
@@ -12,14 +12,22 @@ timed, diffTimeSpec, addTime,+ NowT,+ runNowT, ) where import Control.Monad.Trans.Class (MonadTrans(lift))+import Control.Monad.Trans.Reader (ReaderT(ReaderT, runReaderT), ask) import Data.Aeson (FromJSON, FromJSONKey, ToJSON, ToJSONKey)-import Data.Binary (Binary, get, put)+import Data.Binary (Binary(get, put)) import Data.Int (Int64) import Data.Time (Day(ModifiedJulianDay), UTCTime(UTCTime), DiffTime)+import Prelude+ ( Applicative(pure), Fractional((/), fromRational), Monad(return)+ , Num((*), (+), (-)), Real(toRational), RealFrac(truncate), Show(showsPrec)+ , (.), Eq, Functor, IO, Ord, flip, realToFrac+ ) import System.Clock (TimeSpec) import qualified System.Clock as Clock @@ -32,7 +40,7 @@ instance Show Time where showsPrec n = showsPrec n . unTime instance Binary Time where- put (Time (UTCTime (ModifiedJulianDay day) tod)) = + put (Time (UTCTime (ModifiedJulianDay day) tod)) = put (day, toRational tod) get = do (day, tod) <- get@@ -92,5 +100,24 @@ Clock.sec = Clock.sec time + secDiff, Clock.nsec = Clock.nsec time + nsecDiff }+++{-| An instance of MonadTimeSpec where the time is always a constant value. -}+newtype NowT m a = NowT+ { _unNowT :: ReaderT TimeSpec m a+ }+ deriving newtype+ ( Applicative+ , Functor+ , Monad+ , MonadTrans+ )+instance (Monad m) => MonadTimeSpec (NowT m) where+ getTime = NowT ask+++runNowT :: TimeSpec -> NowT m a -> m a+runNowT now (NowT action) =+ flip runReaderT now action