packages feed

core-data-0.3.3.1: lib/Core/Data/Format.hs

{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE ImportQualifiedPost #-}
{-# OPTIONS_HADDOCK hide #-}

module Core.Data.Format where

import Data.Hourglass qualified as H (
    TimeFormat (..),
    TimeFormatElem (..),
    TimeFormatString (..),
 )

{- |
Format string describing full (nanosecond) precision ISO8601 time,

> 2014-07-31T23:09:35.274387019Z
-}
data ISO8601_Precise = ISO8601_Precise

instance H.TimeFormat ISO8601_Precise where
    toFormat _ =
        H.TimeFormatString
            [ H.Format_Year
            , H.Format_Text '-'
            , H.Format_Month2
            , H.Format_Text '-'
            , H.Format_Day2
            , H.Format_Text 'T'
            , H.Format_Hour
            , H.Format_Text ':'
            , H.Format_Minute
            , H.Format_Text ':'
            , H.Format_Second
            , H.Format_Text '.'
            , H.Format_Precision 9
            , H.Format_Text 'Z'
            ]

data ISO8601_Seconds = ISO8601_Seconds

instance H.TimeFormat ISO8601_Seconds where
    toFormat _ =
        H.TimeFormatString
            [ H.Format_Year
            , H.Format_Text '-'
            , H.Format_Month2
            , H.Format_Text '-'
            , H.Format_Day2
            , H.Format_Text 'T'
            , H.Format_Hour
            , H.Format_Text ':'
            , H.Format_Minute
            , H.Format_Text ':'
            , H.Format_Second
            , H.Format_Text 'Z'
            ]

data Posix_Precise = Posix_Precise

instance H.TimeFormat Posix_Precise where
    toFormat _ =
        H.TimeFormatString
            [ H.Format_UnixSecond
            , H.Format_Text '.'
            , H.Format_MilliSecond
            , H.Format_MicroSecond
            , H.Format_NanoSecond
            ]

data Posix_Micro = Posix_Micro

instance H.TimeFormat Posix_Micro where
    toFormat _ =
        H.TimeFormatString
            [ H.Format_UnixSecond
            , H.Format_Text '.'
            , H.Format_MilliSecond
            , H.Format_MicroSecond
            ]

data Posix_Milli = Posix_Milli

instance H.TimeFormat Posix_Milli where
    toFormat _ =
        H.TimeFormatString
            [ H.Format_UnixSecond
            , H.Format_Text '.'
            , H.Format_MilliSecond
            ]

data Posix_Seconds = Posix_Seconds

instance H.TimeFormat Posix_Seconds where
    toFormat _ =
        H.TimeFormatString
            [ H.Format_UnixSecond
            ]