parsedate-2006.6.4: examples/Parsec.hs
import System.Locale
import System.Time
import System.Time.Parse
import Text.ParserCombinators.Parsec
iso8601DateTimeFormat :: String
iso8601DateTimeFormat = "%Y-%m-%d %H:%M:%S"
parseISO8601DateTime :: Parser CalendarTime
parseISO8601DateTime =
parsecCalendarTime defaultTimeLocale iso8601DateTimeFormat
showISO8601DateTime :: CalendarTime -> String
showISO8601DateTime =
formatCalendarTime defaultTimeLocale iso8601DateTimeFormat
parseEmptyDate :: Parser CalendarTime
parseEmptyDate = parsecCalendarTime defaultTimeLocale ""
timeNow :: IO CalendarTime
timeNow = getClockTime >>= toCalendarTime
p :: Parser a -> String -> IO a
p parser s = case parse parser s s of
Left err -> fail $ show err
Right x -> return x
test :: Parser CalendarTime -> String -> IO ()
test parser s = do t <- p parser s
putStrLn (s ++ " => " ++ showISO8601DateTime t)
main = do t <- timeNow
let s = showISO8601DateTime t
test parseISO8601DateTime s
test parseEmptyDate ""
test (string "date: " >> parseEmptyDate) ("date: ")
test (string "date: " >> parseISO8601DateTime) ("date: " ++ s)