+ from_date = formatTime defaultTimeLocale date_format_padded
+
+
+-- | Parse \<Earnings\> from an 'AutoRaceResultsListing'. These are
+-- essentially 'Int's, but they look like,
+--
+-- * <Earnings>336,826</Earnings>
+-- * <Earnings>1,000,191</Earnings>
+-- * <Earnings>TBA</Earnings>
+--
+xp_earnings :: PU (Maybe Int)
+xp_earnings =
+ (to_earnings, from_earnings) `xpWrap` xpText
+ where
+ strip_commas :: String -> String
+ strip_commas = replace "," ""
+
+ to_earnings :: String -> Maybe Int
+ to_earnings s
+ | s == "TBA" = Nothing
+ | otherwise = (read . strip_commas . show) s
+
+ from_earnings :: Maybe Int -> String
+ from_earnings Nothing = ""
+ from_earnings (Just i) = show i
+
+
+-- | (Un)pickle a 'UTCTime' from a \<RaceDate\> element in an
+-- 'AutoRaceResults' message.
+--
+-- Example:
+--
+-- <RaceDate>6/1/2014 1:00:00 PM</RaceDate>
+-- <RaceDate>5/24/2014 2:45:00 PM</RaceDate>
+--
+xp_racedate :: PU UTCTime
+xp_racedate =
+ (to_racedate, from_racedate) `xpWrapMaybe` xpText
+ where
+ format = date_format ++ " " ++ "%-I:%M:%S %p"
+
+ to_racedate :: String -> Maybe UTCTime
+ to_racedate = parseTime defaultTimeLocale format
+
+ from_racedate :: UTCTime -> String
+ from_racedate = formatTime defaultTimeLocale format