where
import Control.Monad
-import qualified Data.ByteString.Lazy.Char8 as B
-import Data.ByteString.Lazy.Char8 (ByteString)
import Network.HTTP.Lucu.Format
import Network.HTTP.Lucu.Parser
import System.Time
-import System.Locale
month :: [String]
month = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
week :: [String]
week = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]
--- |Format a @CalendarTime@ to RFC 1123 Date and Time string.
+-- |Format a 'System.Time.CalendarTime' to RFC 1123 Date and Time
+-- string.
formatRFC1123DateTime :: CalendarTime -> String
formatRFC1123DateTime time
= time `seq`
fmtDec 2 (ctMin time)
++ ":" ++
fmtDec 2 (ctSec time)
- ++ ":" ++
+ ++ " " ++
id (ctTZName time)
--- |Format a @ClockTime@ to HTTP Date and Time. Time zone will be
--- always UTC but prints as GMT.
+-- |Format a 'System.Time.ClockTime' to HTTP Date and Time. Time zone
+-- will be always UTC but prints as GMT.
formatHTTPDateTime :: ClockTime -> String
formatHTTPDateTime time
= time `seq`
parseHTTPDateTime :: String -> Maybe ClockTime
parseHTTPDateTime src
= case parseStr httpDateTime src of
- (Success ct, _) -> Just ct
- _ -> Nothing
+ (# Success ct, _ #) -> Just ct
+ (# _ , _ #) -> Nothing
httpDateTime :: Parser ClockTime
-httpDateTime = do foldl (<|>) (fail "") (map string week)
+httpDateTime = do foldl (<|>) failP (map string week)
char ','
char ' '
day <- liftM read (count 2 digit)
char ' '
- mon <- foldl (<|>) (fail "") (map tryEqToFst (zip month [1..]))
+ mon <- foldl (<|>) failP (map tryEqToFst (zip month [1..]))
char ' '
year <- liftM read (count 4 digit)
char ' '