Headers m
→ setHeaders a $ Headers $ M.insert key val m
+instance HasHeaders Headers where
+ getHeaders = id
+ setHeaders _ = id
+
toHeaders ∷ [(CIAscii, Ascii)] → Headers
{-# INLINE toHeaders #-}
toHeaders = flip mkHeaders (∅)
-}
headersP ∷ Parser Headers
{-# INLINEABLE headersP #-}
-headersP = do xs ← P.many header
+headersP = do xs ← P.many $ try header
crlf
return $ toHeaders xs
where
header ∷ Parser (CIAscii, Ascii)
- header = try $
- do name ← A.toCIAscii <$> token
+ header = do name ← A.toCIAscii <$> token
_ ← char ':'
skipMany lws
- values ← sepBy content lws
- skipMany lws
+ values ← sepBy content (try lws)
+ skipMany (try lws)
crlf
return (name, joinValues values)
joinValues ∷ [Ascii] → Ascii
{-# INLINE joinValues #-}
- joinValues = A.fromAsciiBuilder ∘ joinWith "\x20"
+ joinValues = A.fromAsciiBuilder ∘ joinWith "\x20" ∘ map A.toAsciiBuilder
hPutHeaders ∷ HandleLike h => h → Headers → IO ()
hPutHeaders !h !(Headers m)