@@ -1,5 +1,6 @@
1{-# LANGUAGE OverloadedStrings #-}
1{-# LANGUAGE OverloadedStrings #-}
2{-# LANGUAGE NamedFieldPuns #-}
2{-# LANGUAGE NamedFieldPuns #-}
3+{-# LANGUAGE BangPatterns #-}
4module Network.Wai.Handler.Warp.HTTP2.HPACK where
5module Network.Wai.Handler.Warp.HTTP2.HPACK where
@@ -68,9 +69,14 @@ hpackDecodeHeader hdrblk Context{decodeDynamicTable} = do
68-- >>> concatCookie [("cookie","a=b"),("foo","bar"),("cookie","c=d"),("cookie","e=f")]
69-- >>> concatCookie [("cookie","a=b"),("foo","bar"),("cookie","c=d"),("cookie","e=f")]
69-- [("foo","bar"),("cookie","a=b; c=d; e=f")]
70-- [("foo","bar"),("cookie","a=b; c=d; e=f")]
70concatCookie :: HeaderList -> HeaderList
71concatCookie :: HeaderList -> HeaderList
71−concatCookie = collect []
72+concatCookie = collect id
73− collect cookies (("cookie",c):rest) = collect (cookies ++ [c]) rest
74+ collect cb (("cookie",c):rest) = collect (cb . (c:)) rest
74− collect cookies (h:rest) = h : collect cookies rest
75+ collect cb (h:rest) = h : collect cb rest
75− collect [] [] = []
76+ collect cb [] = cookie
76− collect cookies [] = [("cookie", B.intercalate "; " cookies)]
81+ | otherwise = let !v = B.intercalate "; " cookies