¿Hay una mejor manera de convertir UTCTime a EpochTime?

Quiero establecer el tiempo de modificación de un archivo al tiempo que obtuve de los datos exif.

Para obtener el tiempo de exif, encontré:

Graphics.Exif.getTag :: Exif -> String -> IO (Maybe String)

Para establecer el tiempo de modificación del archivo, encontré:

System.Posix.Files.setFileTimes :: FilePath -> EpochTime -> EpochTime -> IO ()

Suponiendo que encuentre un tiempo en Exif, necesito convertir una cadena en un tiempo de época.

ConparseTime Puedo conseguir unUTCTime.ConutcTimeToPOSIXSeconds Puedo conseguir unPOSIXTimeCon unPOSIXTime Puedo obtener más o menos unEpochTime

Para convertir de unUTCTime aEpochTime este tipo comprueba, pero no estoy seguro de que sea correcto:

fromIntegral . fromEnum . utcTimeToPOSIXSeconds $ etime

Esto es parte de una función getTime que devolverá el tiempo de los datos Exif, si está presente, de lo contrario, el tiempo de modificación del archivo:

getTime (path,stat) = do
 let ftime                 = modificationTime $ stat
     err (SomeException _) = return ftime
 time <- liftIO $ handle err $ do
   exif <- Exif.fromFile path
   let getExifTime = MaybeT . liftIO . Exif.getTag exif
   res <- runMaybeT $ do
     tmp <- msum . map getExifTime $ [ "DateTimeOriginal","DateTimeDigitized", "DateTime" ]
     MaybeT . return . parseTime defaultTimeLocale "%Y:%m:%d %H:%M:%S" $ tmp
   case res of
     Nothing    -> return ftime
     Just etime -> return . fromIntegral . fromEnum . utcTimeToPOSIXSeconds $ etime
 return (path,time)

Mi pregunta es

¿Hay una manera mejor / más simple de convertir el tiempo? (tal vez usando diferentes bibliotecas)

Respuestas a la pregunta(2)

Su respuesta a la pregunta