ron-rdt-0.7: lib/RON/Data/Time.hs
{-# OPTIONS -Wno-orphans #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE OverloadedStrings #-}
-- | 'Day' instances
module RON.Data.Time (Day) where
import RON.Prelude
import Data.Time (Day, fromGregorian, toGregorian)
import RON.Data (Replicated (..), ReplicatedAsPayload (..),
payloadEncoding)
import RON.Types (Atom (..))
instance Replicated Day where encoding = payloadEncoding
instance ReplicatedAsPayload Day where
toPayload
= (\(y, m, d) ->
map AInteger [fromIntegral y, fromIntegral m, fromIntegral d])
. toGregorian
fromPayload = \case
[AInteger y, AInteger m, AInteger d] -> pure $
fromGregorian (fromIntegral y) (fromIntegral m) (fromIntegral d)
_ -> throwError "bad Day"