on master help sign in
using builder for concatCookie.
commit772e708ee38addf329c44c4e02c30b57c0aab714 authorKazu Yamamoto <kazu@iij.ad.jp> dateThu 10 Dec 2015, 14:54 (11 years ago) parente2c87a2
1 file changed+11−5
warp/Network/Wai/Handler/Warp/HTTP2/HPACK.hs+11−5
warp/Network/Wai/Handler/Warp/HTTP2/HPACK.hs+11−5
@@ -1,5 +1,6 @@
11{-# LANGUAGE OverloadedStrings #-}
22{-# LANGUAGE NamedFieldPuns #-}
3+{-# LANGUAGE BangPatterns #-}
34
45module Network.Wai.Handler.Warp.HTTP2.HPACK where
56
@@ -68,9 +69,14 @@ hpackDecodeHeader hdrblk Context{decodeDynamicTable} = do
6869-- >>> concatCookie [("cookie","a=b"),("foo","bar"),("cookie","c=d"),("cookie","e=f")]
6970-- [("foo","bar"),("cookie","a=b; c=d; e=f")]
7071concatCookie :: HeaderList -> HeaderList
71−concatCookie = collect []
72+concatCookie = collect id
7273 where
73− collect cookies (("cookie",c):rest) = collect (cookies ++ [c]) rest
74− collect cookies (h:rest) = h : collect cookies rest
75− collect [] [] = []
76− collect cookies [] = [("cookie", B.intercalate "; " cookies)]
74+ collect cb (("cookie",c):rest) = collect (cb . (c:)) rest
75+ collect cb (h:rest) = h : collect cb rest
76+ collect cb [] = cookie
77+ where
78+ !cookies = cb []
79+ !cookie
80+ | null cookies = []
81+ | otherwise = let !v = B.intercalate "; " cookies
82+ in [("cookie",v)]