]> gitweb @ CieloNegro.org - Lucu.git/blobdiff - Network/HTTP/Lucu/Headers.hs
ETag and Last Modified
[Lucu.git] / Network / HTTP / Lucu / Headers.hs
index 655252cc4b656c39abcb92252a276ffc1d94e638..ccd514087b2d7a340360c76fdf6dab034cc0d2da 100644 (file)
@@ -20,20 +20,20 @@ class HasHeaders a where
     getHeaders :: a -> Headers
     setHeaders :: a -> Headers -> a
 
-    getHeader :: a -> String -> Maybe String
-    getHeader a key
+    getHeader :: String -> a -> Maybe String
+    getHeader key a
         = fmap snd $ find (noCaseEq key . fst) (getHeaders a)
 
-    deleteHeader :: a -> String -> a
-    deleteHeader a key
+    deleteHeader :: String -> a -> a
+    deleteHeader key a
         = setHeaders a $ filter (not . noCaseEq key . fst) (getHeaders a)
 
-    addHeader :: a -> String -> String -> a
-    addHeader a key val
+    addHeader :: String -> String -> a -> a
+    addHeader key val a
         = setHeaders a $ (getHeaders a) ++ [(key, val)]
 
-    setHeader :: a -> String -> String -> a
-    setHeader a key val
+    setHeader :: String -> String -> a -> a
+    setHeader key val a
         = let list    = getHeaders a
               deleted = filter (not . noCaseEq key . fst) list
               added   = deleted ++ [(key, val)]
@@ -77,7 +77,12 @@ headersP = do xs <- many header
       normalize :: String -> String
       normalize = trimBody . trim isWhiteSpace
 
-      trimBody = nubBy (\ a b -> a == ' ' && b == ' ')
+      trimBody = foldr (++) []
+                 . map (\ s -> if head s == ' ' then
+                                   " "
+                               else
+                                   s)
+                 . group
                  . map (\ c -> if isWhiteSpace c
                                then ' '
                                else c)