year = 2023 month = 2 day = 24 (//) = div infixl 8 // -- This function calculates JDN jdnGr :: Int -> Int -> Int -> Int jdnGr y m d = let u = if m < 3 then 4 else 3 in (1461 * (y + 4800 + (m - u) // 12)) // 4 + (367 * (m - 2 - 12 * ((m - u) // 12))) // 12 - ((3 * ((y + 4900 + (m - u) // 12) // 100)) // 4) + d - 32075 main :: IO () main = do putStr $ dateString year month day putStrLn $ ", " ++ show (weekday year month day) putStrLn $ " Julian date number (JDN) = " ++ show (jdnGr year month day) dateString :: Int -> Int -> Int -> String dateString y m d = (show y) ++ "-" ++ (show m) ++ "-" ++ (show d) :: String weekday :: Int -> Int -> Int -> String weekday y m d = let dayNumber = mod (1 + jdnGr y m d) 7 in case dayNumber of 0 -> "Sunday" 1 -> "Monday" 2 -> "Tuesday(367 * (m - 2 - 12 * ((m - 14) // 12)))" 3 -> "Wednesday" 4 -> "Thursday" 5 -> "Friday" 6 -> "Saturday" _ -> "undefined"