Skip to content

Commit 438912f

Browse files
committed
Merge pull request #397 from jsermeno/master
Allow duplicate headers
2 parents b26bbfc + e1463cd commit 438912f

File tree

1 file changed

+5
-11
lines changed

1 file changed

+5
-11
lines changed

servant/src/Servant/API/ResponseHeaders.hs

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,7 @@ class BuildHeadersTo hs where
6868
instance OVERLAPPING_ BuildHeadersTo '[] where
6969
buildHeadersTo _ = HNil
7070

71-
instance OVERLAPPABLE_ ( FromByteString v, BuildHeadersTo xs, KnownSymbol h
72-
, Contains h xs ~ 'False)
71+
instance OVERLAPPABLE_ ( FromByteString v, BuildHeadersTo xs, KnownSymbol h )
7372
=> BuildHeadersTo ((Header h v) ': xs) where
7473
buildHeadersTo headers =
7574
let wantedHeader = CI.mk . pack $ symbolVal (Proxy :: Proxy h)
@@ -89,7 +88,7 @@ class GetHeaders ls where
8988
instance OVERLAPPING_ GetHeaders (HList '[]) where
9089
getHeaders _ = []
9190

92-
instance OVERLAPPABLE_ ( KnownSymbol h, ToByteString x, GetHeaders (HList xs))
91+
instance OVERLAPPABLE_ ( KnownSymbol h, ToByteString x, GetHeaders (HList xs) )
9392
=> GetHeaders (HList (Header h x ': xs)) where
9493
getHeaders hdrs = case hdrs of
9594
Header val `HCons` rest -> (headerName , toByteString' val):getHeaders rest
@@ -100,7 +99,7 @@ instance OVERLAPPABLE_ ( KnownSymbol h, ToByteString x, GetHeaders (HList xs))
10099
instance OVERLAPPING_ GetHeaders (Headers '[] a) where
101100
getHeaders _ = []
102101

103-
instance OVERLAPPABLE_ ( KnownSymbol h, GetHeaders (HList rest), ToByteString v)
102+
instance OVERLAPPABLE_ ( KnownSymbol h, GetHeaders (HList rest), ToByteString v )
104103
=> GetHeaders (Headers (Header h v ': rest) a) where
105104
getHeaders hs = getHeaders $ getHeadersHList hs
106105

@@ -112,20 +111,15 @@ class AddHeader h v orig new
112111
addHeader :: v -> orig -> new -- ^ N.B.: The same header can't be added multiple times
113112

114113

115-
instance OVERLAPPING_ ( KnownSymbol h, ToByteString v, Contains h (fst ': rest) ~ 'False)
114+
instance OVERLAPPING_ ( KnownSymbol h, ToByteString v )
116115
=> AddHeader h v (Headers (fst ': rest) a) (Headers (Header h v ': fst ': rest) a) where
117116
addHeader a (Headers resp heads) = Headers resp (HCons (Header a) heads)
118117

119118
instance OVERLAPPABLE_ ( KnownSymbol h, ToByteString v
120-
, new ~ (Headers '[Header h v] a))
119+
, new ~ (Headers '[Header h v] a) )
121120
=> AddHeader h v a new where
122121
addHeader a resp = Headers resp (HCons (Header a) HNil)
123122

124-
type family Contains x xs where
125-
Contains x ((Header x a) ': xs) = 'True
126-
Contains x ((Header y a) ': xs) = Contains x xs
127-
Contains x '[] = 'False
128-
129123
-- $setup
130124
-- >>> import Servant.API
131125
-- >>> import Data.Aeson

0 commit comments

Comments
 (0)