{-# LANGUAGE NumericUnderscores #-}
module Builder.Lathe.Time
(
year
, quarter
, month
, monthDate
, weekDate
, ordinalDate
, timeOfDay
, localTime
, utcTime
, timeZone
, zonedTime
) where
import Data.ByteString.Builder
import qualified Data.ByteString.Builder.Prim as Prim
import Data.Bits
import Data.Fixed
import Data.Time.Calendar
import Data.Time.Calendar.Month
import Data.Time.Calendar.OrdinalDate
import Data.Time.Calendar.Quarter
import Data.Time.Calendar.WeekDate
import Data.Time.Clock
import Data.Time.LocalTime
{-# INLINE oneDec #-}
oneDec :: Prim.FixedPrim Int
oneDec :: FixedPrim Int
oneDec =
(\Int
x -> Int -> Word8
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
x Word8 -> Word8 -> Word8
forall a. Num a => a -> a -> a
+ Word8
0x30
)
(Int -> Word8) -> FixedPrim Word8 -> FixedPrim Int
forall (f :: * -> *) b a. Contravariant f => (b -> a) -> f a -> f b
Prim.>$< FixedPrim Word8
Prim.word8
{-# INLINE twoDec #-}
twoDec :: Prim.FixedPrim Int
twoDec :: FixedPrim Int
twoDec =
(\Int
xx -> let (Int
x1, Int
x0) = Int
xx Int -> Int -> (Int, Int)
forall a. Integral a => a -> a -> (a, a)
`quotRem` Int
10
in (Word16 -> Int -> Word16
forall a. Bits a => a -> Int -> a
unsafeShiftL (Int -> Word16
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
x1) Int
8 Word16 -> Word16 -> Word16
forall a. Num a => a -> a -> a
+ Int -> Word16
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
x0 Word16 -> Word16 -> Word16
forall a. Num a => a -> a -> a
+ Word16
0x3030)
)
(Int -> Word16) -> FixedPrim Word16 -> FixedPrim Int
forall (f :: * -> *) b a. Contravariant f => (b -> a) -> f a -> f b
Prim.>$< FixedPrim Word16
Prim.word16BE
{-# INLINE threeDec #-}
threeDec :: Prim.FixedPrim Int
threeDec :: FixedPrim Int
threeDec =
(Int -> Int -> (Int, Int)
forall a. Integral a => a -> a -> (a, a)
`quotRem` Int
100)
(Int -> (Int, Int)) -> FixedPrim (Int, Int) -> FixedPrim Int
forall (f :: * -> *) b a. Contravariant f => (b -> a) -> f a -> f b
Prim.>$< FixedPrim Int
oneDec
FixedPrim Int -> FixedPrim Int -> FixedPrim (Int, Int)
forall (f :: * -> *) a b. Monoidal f => f a -> f b -> f (a, b)
Prim.>*< FixedPrim Int
twoDec
trimmedSeconds :: Pico -> Builder
trimmedSeconds :: Pico -> Builder
trimmedSeconds (MkFixed Year
ssms) =
let double :: Double
double = Year -> Double
forall a b. (Integral a, Num b) => a -> b
fromIntegral Year
ssms Double -> Double -> Double
forall a. Fractional a => a -> a -> a
/ Double
1_000_000_000_000
ss :: Int
ss = Double -> Int
forall b. Integral b => Double -> b
forall a b. (RealFrac a, Integral b) => a -> b
truncate Double
double
ms :: Double
ms = Double
double Double -> Double -> Double
forall a. Num a => a -> a -> a
- Int -> Double
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
ss
in if Double
ms Double -> Double -> Bool
forall a. Eq a => a -> a -> Bool
== Double
0
then FixedPrim Int -> Int -> Builder
forall a. FixedPrim a -> a -> Builder
Prim.primFixed FixedPrim Int
twoDec Int
ss
else ( if Int
ss Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>= Int
10
then Builder
forall a. Monoid a => a
mempty
else Word8 -> Builder
word8 Word8
0x30
)
Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> FloatFormat -> Double -> Builder
formatDouble FloatFormat
standardDefaultPrecision Double
double
{-# INLINE withYear #-}
withYear :: Year -> (Prim.FixedPrim Int -> Int -> Builder) -> Builder
withYear :: Year -> (FixedPrim Int -> Int -> Builder) -> Builder
withYear Year
yyyy FixedPrim Int -> Int -> Builder
f =
let (Bool
m, Year
y, Year
yyy) | Year
yyyy Year -> Year -> Bool
forall a. Ord a => a -> a -> Bool
>= Year
0 = let (Year
x, Year
xxx) = Year
yyyy Year -> Year -> (Year, Year)
forall a. Integral a => a -> a -> (a, a)
`quotRem` Year
1_000
in (Bool
False, Year
x, Year
xxx)
| Bool
otherwise = let (Year
x, Year
xxx) = Year -> Year
forall a. Num a => a -> a
negate Year
yyyy Year -> Year -> (Year, Year)
forall a. Integral a => a -> a -> (a, a)
`quotRem` Year
1_000
in (Bool
True, Year
x, Year
xxx)
in ( if Bool
m
then Word8 -> Builder
word8 Word8
0x2D
else Builder
forall a. Monoid a => a
mempty
)
Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> Year -> Builder
integerDec Year
y
Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> FixedPrim Int -> Int -> Builder
f FixedPrim Int
threeDec (Year -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral Year
yyy)
year :: Year -> Builder
year :: Year -> Builder
year Year
yyyy = Year -> (FixedPrim Int -> Int -> Builder) -> Builder
withYear Year
yyyy FixedPrim Int -> Int -> Builder
forall a. FixedPrim a -> a -> Builder
Prim.primFixed
quarter :: Quarter -> Builder
quarter :: Quarter -> Builder
quarter (YearQuarter Year
yyyy QuarterOfYear
q) =
let i :: Word8
i = case QuarterOfYear
q of
QuarterOfYear
Q1 -> Word8
0x31
QuarterOfYear
Q2 -> Word8
0x32
QuarterOfYear
Q3 -> Word8
0x33
QuarterOfYear
Q4 -> Word8
0x34
in Year -> (FixedPrim Int -> Int -> Builder) -> Builder
withYear Year
yyyy ((FixedPrim Int -> Int -> Builder) -> Builder)
-> (FixedPrim Int -> Int -> Builder) -> Builder
forall a b. (a -> b) -> a -> b
$ \FixedPrim Int
yearDec Int
yyy ->
FixedPrim (Int, (Word16, Word8))
-> (Int, (Word16, Word8)) -> Builder
forall a. FixedPrim a -> a -> Builder
Prim.primFixed
( (Int, (Word16, Word8)) -> (Int, (Word16, Word8))
forall a. a -> a
id
((Int, (Word16, Word8)) -> (Int, (Word16, Word8)))
-> FixedPrim (Int, (Word16, Word8))
-> FixedPrim (Int, (Word16, Word8))
forall (f :: * -> *) b a. Contravariant f => (b -> a) -> f a -> f b
Prim.>$< FixedPrim Int
yearDec
FixedPrim Int
-> FixedPrim (Word16, Word8) -> FixedPrim (Int, (Word16, Word8))
forall (f :: * -> *) a b. Monoidal f => f a -> f b -> f (a, b)
Prim.>*< FixedPrim Word16
Prim.word16BE
FixedPrim Word16 -> FixedPrim Word8 -> FixedPrim (Word16, Word8)
forall (f :: * -> *) a b. Monoidal f => f a -> f b -> f (a, b)
Prim.>*< FixedPrim Word8
Prim.word8
)
(Int
yyy, (Word16
0x2D51, Word8
i))
month :: Month -> Builder
month :: Month -> Builder
month (YearMonth Year
yyyy Int
mm) =
Year -> (FixedPrim Int -> Int -> Builder) -> Builder
withYear Year
yyyy ((FixedPrim Int -> Int -> Builder) -> Builder)
-> (FixedPrim Int -> Int -> Builder) -> Builder
forall a b. (a -> b) -> a -> b
$ \FixedPrim Int
yearDec Int
yyy ->
FixedPrim (Int, (Word8, Int)) -> (Int, (Word8, Int)) -> Builder
forall a. FixedPrim a -> a -> Builder
Prim.primFixed
( (Int, (Word8, Int)) -> (Int, (Word8, Int))
forall a. a -> a
id
((Int, (Word8, Int)) -> (Int, (Word8, Int)))
-> FixedPrim (Int, (Word8, Int)) -> FixedPrim (Int, (Word8, Int))
forall (f :: * -> *) b a. Contravariant f => (b -> a) -> f a -> f b
Prim.>$< FixedPrim Int
yearDec
FixedPrim Int
-> FixedPrim (Word8, Int) -> FixedPrim (Int, (Word8, Int))
forall (f :: * -> *) a b. Monoidal f => f a -> f b -> f (a, b)
Prim.>*< FixedPrim Word8
Prim.word8
FixedPrim Word8 -> FixedPrim Int -> FixedPrim (Word8, Int)
forall (f :: * -> *) a b. Monoidal f => f a -> f b -> f (a, b)
Prim.>*< FixedPrim Int
twoDec
)
(Int
yyy, (Word8
0x2D, Int
mm))
monthDate :: Day -> Builder
monthDate :: Day -> Builder
monthDate (YearMonthDay Year
yyyy Int
mm Int
dd) =
Year -> (FixedPrim Int -> Int -> Builder) -> Builder
withYear Year
yyyy ((FixedPrim Int -> Int -> Builder) -> Builder)
-> (FixedPrim Int -> Int -> Builder) -> Builder
forall a b. (a -> b) -> a -> b
$ \FixedPrim Int
yearDec Int
yyy ->
FixedPrim (Int, (Word8, (Int, (Word8, Int))))
-> (Int, (Word8, (Int, (Word8, Int)))) -> Builder
forall a. FixedPrim a -> a -> Builder
Prim.primFixed
( (Int, (Word8, (Int, (Word8, Int))))
-> (Int, (Word8, (Int, (Word8, Int))))
forall a. a -> a
id
((Int, (Word8, (Int, (Word8, Int))))
-> (Int, (Word8, (Int, (Word8, Int)))))
-> FixedPrim (Int, (Word8, (Int, (Word8, Int))))
-> FixedPrim (Int, (Word8, (Int, (Word8, Int))))
forall (f :: * -> *) b a. Contravariant f => (b -> a) -> f a -> f b
Prim.>$< FixedPrim Int
yearDec
FixedPrim Int
-> FixedPrim (Word8, (Int, (Word8, Int)))
-> FixedPrim (Int, (Word8, (Int, (Word8, Int))))
forall (f :: * -> *) a b. Monoidal f => f a -> f b -> f (a, b)
Prim.>*< FixedPrim Word8
Prim.word8
FixedPrim Word8
-> FixedPrim (Int, (Word8, Int))
-> FixedPrim (Word8, (Int, (Word8, Int)))
forall (f :: * -> *) a b. Monoidal f => f a -> f b -> f (a, b)
Prim.>*< FixedPrim Int
twoDec
FixedPrim Int
-> FixedPrim (Word8, Int) -> FixedPrim (Int, (Word8, Int))
forall (f :: * -> *) a b. Monoidal f => f a -> f b -> f (a, b)
Prim.>*< FixedPrim Word8
Prim.word8
FixedPrim Word8 -> FixedPrim Int -> FixedPrim (Word8, Int)
forall (f :: * -> *) a b. Monoidal f => f a -> f b -> f (a, b)
Prim.>*< FixedPrim Int
twoDec
)
(Int
yyy, (Word8
0x2D, (Int
mm, (Word8
0x2D, Int
dd))))
ordinalDate :: Day -> Builder
ordinalDate :: Day -> Builder
ordinalDate Day
x =
let (Year
yyyy, Int
ddd) = Day -> (Year, Int)
toOrdinalDate Day
x
in Year -> (FixedPrim Int -> Int -> Builder) -> Builder
withYear Year
yyyy ((FixedPrim Int -> Int -> Builder) -> Builder)
-> (FixedPrim Int -> Int -> Builder) -> Builder
forall a b. (a -> b) -> a -> b
$ \FixedPrim Int
yearDec Int
yyy ->
FixedPrim (Int, (Word8, Int)) -> (Int, (Word8, Int)) -> Builder
forall a. FixedPrim a -> a -> Builder
Prim.primFixed
( (Int, (Word8, Int)) -> (Int, (Word8, Int))
forall a. a -> a
id
((Int, (Word8, Int)) -> (Int, (Word8, Int)))
-> FixedPrim (Int, (Word8, Int)) -> FixedPrim (Int, (Word8, Int))
forall (f :: * -> *) b a. Contravariant f => (b -> a) -> f a -> f b
Prim.>$< FixedPrim Int
yearDec
FixedPrim Int
-> FixedPrim (Word8, Int) -> FixedPrim (Int, (Word8, Int))
forall (f :: * -> *) a b. Monoidal f => f a -> f b -> f (a, b)
Prim.>*< FixedPrim Word8
Prim.word8
FixedPrim Word8 -> FixedPrim Int -> FixedPrim (Word8, Int)
forall (f :: * -> *) a b. Monoidal f => f a -> f b -> f (a, b)
Prim.>*< FixedPrim Int
threeDec
)
(Int
yyy, (Word8
0x2D, Int
ddd))
weekDate :: Day -> Builder
weekDate :: Day -> Builder
weekDate Day
x =
let (Year
yyyy, Int
ww, Int
d) = Day -> (Year, Int, Int)
toWeekDate Day
x
in Year -> (FixedPrim Int -> Int -> Builder) -> Builder
withYear Year
yyyy ((FixedPrim Int -> Int -> Builder) -> Builder)
-> (FixedPrim Int -> Int -> Builder) -> Builder
forall a b. (a -> b) -> a -> b
$ \FixedPrim Int
yearDec Int
yyy ->
FixedPrim (Int, (Word16, (Int, (Word8, Int))))
-> (Int, (Word16, (Int, (Word8, Int)))) -> Builder
forall a. FixedPrim a -> a -> Builder
Prim.primFixed
( (Int, (Word16, (Int, (Word8, Int))))
-> (Int, (Word16, (Int, (Word8, Int))))
forall a. a -> a
id
((Int, (Word16, (Int, (Word8, Int))))
-> (Int, (Word16, (Int, (Word8, Int)))))
-> FixedPrim (Int, (Word16, (Int, (Word8, Int))))
-> FixedPrim (Int, (Word16, (Int, (Word8, Int))))
forall (f :: * -> *) b a. Contravariant f => (b -> a) -> f a -> f b
Prim.>$< FixedPrim Int
yearDec
FixedPrim Int
-> FixedPrim (Word16, (Int, (Word8, Int)))
-> FixedPrim (Int, (Word16, (Int, (Word8, Int))))
forall (f :: * -> *) a b. Monoidal f => f a -> f b -> f (a, b)
Prim.>*< FixedPrim Word16
Prim.word16BE
FixedPrim Word16
-> FixedPrim (Int, (Word8, Int))
-> FixedPrim (Word16, (Int, (Word8, Int)))
forall (f :: * -> *) a b. Monoidal f => f a -> f b -> f (a, b)
Prim.>*< FixedPrim Int
twoDec
FixedPrim Int
-> FixedPrim (Word8, Int) -> FixedPrim (Int, (Word8, Int))
forall (f :: * -> *) a b. Monoidal f => f a -> f b -> f (a, b)
Prim.>*< FixedPrim Word8
Prim.word8
FixedPrim Word8 -> FixedPrim Int -> FixedPrim (Word8, Int)
forall (f :: * -> *) a b. Monoidal f => f a -> f b -> f (a, b)
Prim.>*< FixedPrim Int
oneDec
)
(Int
yyy, (Word16
0x2D57, (Int
ww, (Word8
0x2D, Int
d))))
timeOfDay :: TimeOfDay -> Builder
timeOfDay :: TimeOfDay -> Builder
timeOfDay (TimeOfDay Int
hh Int
mm Pico
ssms) =
FixedPrim (Int, (Word8, (Int, Word8)))
-> (Int, (Word8, (Int, Word8))) -> Builder
forall a. FixedPrim a -> a -> Builder
Prim.primFixed
( (Int, (Word8, (Int, Word8))) -> (Int, (Word8, (Int, Word8)))
forall a. a -> a
id
((Int, (Word8, (Int, Word8))) -> (Int, (Word8, (Int, Word8))))
-> FixedPrim (Int, (Word8, (Int, Word8)))
-> FixedPrim (Int, (Word8, (Int, Word8)))
forall (f :: * -> *) b a. Contravariant f => (b -> a) -> f a -> f b
Prim.>$< FixedPrim Int
twoDec
FixedPrim Int
-> FixedPrim (Word8, (Int, Word8))
-> FixedPrim (Int, (Word8, (Int, Word8)))
forall (f :: * -> *) a b. Monoidal f => f a -> f b -> f (a, b)
Prim.>*< FixedPrim Word8
Prim.word8
FixedPrim Word8
-> FixedPrim (Int, Word8) -> FixedPrim (Word8, (Int, Word8))
forall (f :: * -> *) a b. Monoidal f => f a -> f b -> f (a, b)
Prim.>*< FixedPrim Int
twoDec
FixedPrim Int -> FixedPrim Word8 -> FixedPrim (Int, Word8)
forall (f :: * -> *) a b. Monoidal f => f a -> f b -> f (a, b)
Prim.>*< FixedPrim Word8
Prim.word8
)
(Int
hh, (Word8
0x3A, (Int
mm, Word8
0x3A)))
Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> Pico -> Builder
trimmedSeconds Pico
ssms
localTime :: LocalTime -> Builder
localTime :: LocalTime -> Builder
localTime (LocalTime (YearMonthDay Year
yyyy Int
mm Int
dd) (TimeOfDay Int
hh Int
nn Pico
ssms)) =
Year -> (FixedPrim Int -> Int -> Builder) -> Builder
withYear Year
yyyy ((FixedPrim Int -> Int -> Builder) -> Builder)
-> (FixedPrim Int -> Int -> Builder) -> Builder
forall a b. (a -> b) -> a -> b
$ \FixedPrim Int
yearDec Int
yyy -> do
FixedPrim
(Int,
(Word8,
(Int, (Word8, (Int, (Word8, (Int, (Word8, (Int, Word8)))))))))
-> (Int,
(Word8,
(Int, (Word8, (Int, (Word8, (Int, (Word8, (Int, Word8)))))))))
-> Builder
forall a. FixedPrim a -> a -> Builder
Prim.primFixed
( (Int,
(Word8,
(Int, (Word8, (Int, (Word8, (Int, (Word8, (Int, Word8)))))))))
-> (Int,
(Word8,
(Int, (Word8, (Int, (Word8, (Int, (Word8, (Int, Word8)))))))))
forall a. a -> a
id
((Int,
(Word8,
(Int, (Word8, (Int, (Word8, (Int, (Word8, (Int, Word8)))))))))
-> (Int,
(Word8,
(Int, (Word8, (Int, (Word8, (Int, (Word8, (Int, Word8))))))))))
-> FixedPrim
(Int,
(Word8,
(Int, (Word8, (Int, (Word8, (Int, (Word8, (Int, Word8)))))))))
-> FixedPrim
(Int,
(Word8,
(Int, (Word8, (Int, (Word8, (Int, (Word8, (Int, Word8)))))))))
forall (f :: * -> *) b a. Contravariant f => (b -> a) -> f a -> f b
Prim.>$< FixedPrim Int
yearDec
FixedPrim Int
-> FixedPrim
(Word8,
(Int, (Word8, (Int, (Word8, (Int, (Word8, (Int, Word8))))))))
-> FixedPrim
(Int,
(Word8,
(Int, (Word8, (Int, (Word8, (Int, (Word8, (Int, Word8)))))))))
forall (f :: * -> *) a b. Monoidal f => f a -> f b -> f (a, b)
Prim.>*< FixedPrim Word8
Prim.word8
FixedPrim Word8
-> FixedPrim
(Int, (Word8, (Int, (Word8, (Int, (Word8, (Int, Word8)))))))
-> FixedPrim
(Word8,
(Int, (Word8, (Int, (Word8, (Int, (Word8, (Int, Word8))))))))
forall (f :: * -> *) a b. Monoidal f => f a -> f b -> f (a, b)
Prim.>*< FixedPrim Int
twoDec
FixedPrim Int
-> FixedPrim (Word8, (Int, (Word8, (Int, (Word8, (Int, Word8))))))
-> FixedPrim
(Int, (Word8, (Int, (Word8, (Int, (Word8, (Int, Word8)))))))
forall (f :: * -> *) a b. Monoidal f => f a -> f b -> f (a, b)
Prim.>*< FixedPrim Word8
Prim.word8
FixedPrim Word8
-> FixedPrim (Int, (Word8, (Int, (Word8, (Int, Word8)))))
-> FixedPrim (Word8, (Int, (Word8, (Int, (Word8, (Int, Word8))))))
forall (f :: * -> *) a b. Monoidal f => f a -> f b -> f (a, b)
Prim.>*< FixedPrim Int
twoDec
FixedPrim Int
-> FixedPrim (Word8, (Int, (Word8, (Int, Word8))))
-> FixedPrim (Int, (Word8, (Int, (Word8, (Int, Word8)))))
forall (f :: * -> *) a b. Monoidal f => f a -> f b -> f (a, b)
Prim.>*< FixedPrim Word8
Prim.word8
FixedPrim Word8
-> FixedPrim (Int, (Word8, (Int, Word8)))
-> FixedPrim (Word8, (Int, (Word8, (Int, Word8))))
forall (f :: * -> *) a b. Monoidal f => f a -> f b -> f (a, b)
Prim.>*< FixedPrim Int
twoDec
FixedPrim Int
-> FixedPrim (Word8, (Int, Word8))
-> FixedPrim (Int, (Word8, (Int, Word8)))
forall (f :: * -> *) a b. Monoidal f => f a -> f b -> f (a, b)
Prim.>*< FixedPrim Word8
Prim.word8
FixedPrim Word8
-> FixedPrim (Int, Word8) -> FixedPrim (Word8, (Int, Word8))
forall (f :: * -> *) a b. Monoidal f => f a -> f b -> f (a, b)
Prim.>*< FixedPrim Int
twoDec
FixedPrim Int -> FixedPrim Word8 -> FixedPrim (Int, Word8)
forall (f :: * -> *) a b. Monoidal f => f a -> f b -> f (a, b)
Prim.>*< FixedPrim Word8
Prim.word8
)
(Int
yyy, (Word8
0x2D, (Int
mm, (Word8
0x2D, (Int
dd, (Word8
0x54, (Int
hh, (Word8
0x3A, (Int
nn, Word8
0x3A)))))))))
Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> Pico -> Builder
trimmedSeconds Pico
ssms
utcTime :: UTCTime -> Builder
utcTime :: UTCTime -> Builder
utcTime UTCTime
time = LocalTime -> Builder
localTime (TimeZone -> UTCTime -> LocalTime
utcToLocalTime TimeZone
utc UTCTime
time) Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> Word8 -> Builder
word8 Word8
0x5A
timeZone :: TimeZone -> Builder
timeZone :: TimeZone -> Builder
timeZone TimeZone
zone =
let hhmm :: Int
hhmm = TimeZone -> Int
timeZoneMinutes TimeZone
zone
(Word8
m, Int
hh, Int
mm) = if Int
hhmm Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>= Int
0
then let (Int
yy, Int
zz) = Int
hhmm Int -> Int -> (Int, Int)
forall a. Integral a => a -> a -> (a, a)
`quotRem` Int
60
in (Word8
0x2B, Int
yy, Int
zz)
else let (Int
yy, Int
zz) = Int -> Int
forall a. Num a => a -> a
negate Int
hhmm Int -> Int -> (Int, Int)
forall a. Integral a => a -> a -> (a, a)
`quotRem` Int
60
in (Word8
0x2D, Int
yy, Int
zz)
in FixedPrim (Word8, (Int, (Word8, Int)))
-> (Word8, (Int, (Word8, Int))) -> Builder
forall a. FixedPrim a -> a -> Builder
Prim.primFixed
( (Word8, (Int, (Word8, Int))) -> (Word8, (Int, (Word8, Int)))
forall a. a -> a
id
((Word8, (Int, (Word8, Int))) -> (Word8, (Int, (Word8, Int))))
-> FixedPrim (Word8, (Int, (Word8, Int)))
-> FixedPrim (Word8, (Int, (Word8, Int)))
forall (f :: * -> *) b a. Contravariant f => (b -> a) -> f a -> f b
Prim.>$< FixedPrim Word8
Prim.word8
FixedPrim Word8
-> FixedPrim (Int, (Word8, Int))
-> FixedPrim (Word8, (Int, (Word8, Int)))
forall (f :: * -> *) a b. Monoidal f => f a -> f b -> f (a, b)
Prim.>*< FixedPrim Int
twoDec
FixedPrim Int
-> FixedPrim (Word8, Int) -> FixedPrim (Int, (Word8, Int))
forall (f :: * -> *) a b. Monoidal f => f a -> f b -> f (a, b)
Prim.>*< FixedPrim Word8
Prim.word8
FixedPrim Word8 -> FixedPrim Int -> FixedPrim (Word8, Int)
forall (f :: * -> *) a b. Monoidal f => f a -> f b -> f (a, b)
Prim.>*< FixedPrim Int
twoDec
)
(Word8
m, (Int
hh, (Word8
0x3A, Int
mm)))
zonedTime :: ZonedTime -> Builder
zonedTime :: ZonedTime -> Builder
zonedTime (ZonedTime LocalTime
local TimeZone
zone) = LocalTime -> Builder
localTime LocalTime
local Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> TimeZone -> Builder
timeZone TimeZone
zone