content: module ProjectM36.DataTypes.Day where
  import ProjectM36.Base
  import ProjectM36.AtomFunctionBody
  import ProjectM36.AtomFunctionError
  import qualified Data.HashSet as HS
  import Data.Time.Calendar
  
  
  dayAtomFunctions :: AtomFunctions
  dayAtomFunctions = HS.fromList [
    Function { funcName = "fromGregorian",
                   funcType = [IntegerAtomType, IntegerAtomType, IntegerAtomType, DayAtomType],
                   funcBody = compiledAtomFunctionBody $
                              \case
                                IntegerAtom year:IntegerAtom month:IntegerAtom day:_ -> pure $ DayAtom (fromGregorian (fromIntegral year) (fromIntegral month) (fromIntegral day))
                                _ -> Left AtomFunctionTypeMismatchError
                   },
    Function { funcName = "dayEarlierThan",
                   funcType = [DayAtomType, DayAtomType, BoolAtomType],
                   funcBody = compiledAtomFunctionBody $
                              \case
                                ConstructedAtom _ _ (IntAtom dayA:_):ConstructedAtom _ _ (IntAtom dayB:_):_ -> pure (BoolAtom (dayA < dayB))
                                _ -> Left AtomFunctionTypeMismatchError
                 }
    ]
  