    -- | Types and functions for
    -- <http://en.wikipedia.org/wiki/Coordinated_Universal_Time UTC> and
    -- <http://en.wikipedia.org/wiki/Universal_Time#Versions UT1>.
    --
    -- If you don't care about leap seconds, keep to 'UTCTime' and
    -- 'NominalDiffTime' for your clock calculations, and you'll be fine.
    --
    -- 'Num', 'Real', 'Fractional' and 'RealFrac' instances for 'DiffTime' and
    -- 'NominalDiffTime' are only available by importing "Data.Thyme.Time". In
    -- their stead are instances of 'Data.AdditiveGroup.AdditiveGroup',
    -- 'Data.Basis.HasBasis' and 'Data.VectorSpace.VectorSpace', with
    -- @'Data.VectorSpace.Scalar' 'DiffTime' ≡ 'Data.VectorSpace.Scalar'
    -- 'NominalDiffTime' ≡ 'Rational'@.
    --
    --  Using 'fromSeconds' and 'toSeconds' to convert between 'TimeDiff's and
    --  other numeric types. If you really must coerce between 'DiffTime' and
    --  'NominalDiffTime', @'view' ('microseconds' . 'from' 'microseconds')@.
    --
    -- 'UTCTime' is an instance of 'Data.AffineSpace.AffineSpace', with
    -- @'Data.AffineSpace.Diff' 'UTCTime' ≡ 'NominalDiffTime'@.
    --
    -- 'UTCTime' is not Y294K-compliant. Please file a bug report on GitHub when
    -- this becomes a problem.

    module Data.Thyme.Clock (
        -- * Universal Time
          UniversalTime
        , modJulianDate

        -- * Absolute intervals
        , DiffTime

        -- * UTC
        , UTCTime, UTCView (..)
        , utcTime
        , NominalDiffTime
        , module Data.Thyme.Clock

        -- * Time interval conversion
        , TimeDiff (..)
        , toSeconds, fromSeconds
        , toSeconds', fromSeconds'

        -- * Lenses
        , _utctDay, _utctDayTime
        ) where

    import Prelude
    import Control.Lens
    import Data.Thyme.Clock.Internal
    import Data.Thyme.Clock.POSIX

    -- | Get the current UTC time from the system clock.
    getCurrentTime :: IO UTCTime
    getCurrentTime = fmap (review posixTime) getPOSIXTime