@@ -15,9 +15,11 @@ import Data.Data
1515import Data.Functor.Compose (Compose (..))
1616import Data.Functor.Identity (Identity (..))
1717import Data.Text
18+import Data.Time (Day (..), fromGregorian)
1819import GHC.Generics
19−import Test.QuickCheck (Property, counterexample)
20+import Test.QuickCheck (Arbitrary (..), Property, counterexample)
2021import qualified Data.Map as Map
22+import Data.Aeson
2123
2224type I = Identity
2325type Compose3 f g h = Compose (Compose f g) h
@@ -115,3 +117,19 @@ deriving instance Generic EitherTextInt
115117failure :: Show a => String -> String -> a -> Property
116118failure func msg v = counterexample
117119 (func ++ " failed: " ++ msg ++ ", " ++ show v) False
120+
121+newtype BCEDay = BCEDay Day
122+ deriving (Eq, Show)
123+
124+zeroDay :: Day
125+zeroDay = fromGregorian 0 0 0
126+
127+instance Arbitrary BCEDay where
128+ arbitrary = fmap (BCEDay . ModifiedJulianDay . (+ toModifiedJulianDay zeroDay)) arbitrary
129+
130+instance ToJSON BCEDay where
131+ toJSON (BCEDay d) = toJSON d
132+ toEncoding (BCEDay d) = toEncoding d
133+
134+instance FromJSON BCEDay where
135+ parseJSON = fmap BCEDay . parseJSON