Add Zoned time to class.

This commit is contained in:
Jesse Rosenthal 2016-11-30 09:46:08 -05:00 committed by John MacFarlane
parent fe0b71a2f1
commit 9d9f615593

View file

@ -35,6 +35,7 @@ module Text.Pandoc.Class ( PandocMonad(..)
, PureState(..)
, PureEnv(..)
, getPOSIXTime
, getZonedTime
, addWarningWithPos
, PandocIO(..)
, PandocPure(..)
@ -64,6 +65,8 @@ import qualified Text.Pandoc.Compat.Time as IO (getCurrentTime)
import Data.Time.Clock.POSIX ( utcTimeToPOSIXSeconds
, posixSecondsToUTCTime
, POSIXTime )
import Data.Time.LocalTime (TimeZone, ZonedTime, utcToZonedTime, utc)
import qualified Data.Time.LocalTime as IO (getCurrentTimeZone)
import Text.Pandoc.MIME (MimeType, getMimeType)
import Text.Pandoc.MediaBag (MediaBag)
import qualified Text.Pandoc.MediaBag as MB
@ -82,12 +85,12 @@ import Data.Word (Word8)
import Data.Typeable
import Data.Default
import System.IO.Error
import Data.Map (Map)
import qualified Data.Map as M
class (Functor m, Applicative m, Monad m, MonadError PandocExecutionError m) => PandocMonad m where
lookupEnv :: String -> m (Maybe String)
getCurrentTime :: m UTCTime
getCurrentTimeZone :: m TimeZone
getDefaultReferenceDocx :: Maybe FilePath -> m Archive
getDefaultReferenceODT :: Maybe FilePath -> m Archive
newStdGen :: m StdGen
@ -117,6 +120,12 @@ class (Functor m, Applicative m, Monad m, MonadError PandocExecutionError m) =>
getPOSIXTime :: (PandocMonad m) => m POSIXTime
getPOSIXTime = utcTimeToPOSIXSeconds <$> getCurrentTime
getZonedTime :: (PandocMonad m) => m ZonedTime
getZonedTime = do
t <- getCurrentTime
tz <- getCurrentTimeZone
return $ utcToZonedTime tz t
addWarningWithPos :: PandocMonad m
=> Maybe SourcePos
-> String
@ -169,6 +178,7 @@ newtype PandocIO a = PandocIO {
instance PandocMonad PandocIO where
lookupEnv = liftIO . IO.lookupEnv
getCurrentTime = liftIO IO.getCurrentTime
getCurrentTimeZone = liftIO IO.getCurrentTimeZone
getDefaultReferenceDocx = liftIO . IO.getDefaultReferenceDocx
getDefaultReferenceODT = liftIO . IO.getDefaultReferenceODT
newStdGen = liftIO IO.newStdGen
@ -236,6 +246,7 @@ getFileInfo fp tree = M.lookup fp $ unFileTree tree
data PureEnv = PureEnv { envEnv :: [(String, String)]
, envTime :: UTCTime
, envTimeZone :: TimeZone
, envReferenceDocx :: Archive
, envReferenceODT :: Archive
, envFiles :: FileTree
@ -249,6 +260,7 @@ data PureEnv = PureEnv { envEnv :: [(String, String)]
instance Default PureEnv where
def = PureEnv { envEnv = [("USER", "pandoc-user")]
, envTime = posixSecondsToUTCTime 0
, envTimeZone = utc
, envReferenceDocx = emptyArchive
, envReferenceODT = emptyArchive
, envFiles = mempty
@ -280,6 +292,8 @@ instance PandocMonad PandocPure where
getCurrentTime = asks envTime
getCurrentTimeZone = asks envTimeZone
getDefaultReferenceDocx _ = asks envReferenceDocx
getDefaultReferenceODT _ = asks envReferenceODT