Skip to content

Commit a8184a2

Browse files
committed
Add KnownStatus typeclass
1 parent 4b225c2 commit a8184a2

File tree

2 files changed

+154
-0
lines changed

2 files changed

+154
-0
lines changed

servant/servant.cabal

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ library
5555
Servant.API.RemoteHost
5656
Servant.API.ReqBody
5757
Servant.API.ResponseHeaders
58+
Servant.API.Status
5859
Servant.API.Stream
5960
Servant.API.Sub
6061
Servant.API.TypeLevel

servant/src/Servant/API/Status.hs

Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
{-# LANGUAGE DataKinds #-}
2+
module Servant.API.Status where
3+
4+
import Network.HTTP.Types.Status
5+
import GHC.TypeNats
6+
7+
-- | Witness that a type-level natural number corresponds to a HTTP status code
8+
class KnownNat n => KnownStatus n where
9+
statusVal :: proxy n -> Status
10+
11+
instance KnownStatus 100 where
12+
statusVal _ = status100
13+
14+
instance KnownStatus 101 where
15+
statusVal _ = status101
16+
17+
instance KnownStatus 200 where
18+
statusVal _ = status200
19+
20+
instance KnownStatus 201 where
21+
statusVal _ = status201
22+
23+
instance KnownStatus 202 where
24+
statusVal _ = status202
25+
26+
instance KnownStatus 203 where
27+
statusVal _ = status203
28+
29+
instance KnownStatus 204 where
30+
statusVal _ = status204
31+
32+
instance KnownStatus 205 where
33+
statusVal _ = status205
34+
35+
instance KnownStatus 206 where
36+
statusVal _ = status206
37+
38+
instance KnownStatus 300 where
39+
statusVal _ = status300
40+
41+
instance KnownStatus 301 where
42+
statusVal _ = status301
43+
44+
instance KnownStatus 302 where
45+
statusVal _ = status302
46+
47+
instance KnownStatus 303 where
48+
statusVal _ = status303
49+
50+
instance KnownStatus 304 where
51+
statusVal _ = status304
52+
53+
instance KnownStatus 305 where
54+
statusVal _ = status305
55+
56+
instance KnownStatus 307 where
57+
statusVal _ = status307
58+
59+
instance KnownStatus 308 where
60+
statusVal _ = status308
61+
62+
instance KnownStatus 400 where
63+
statusVal _ = status400
64+
65+
instance KnownStatus 401 where
66+
statusVal _ = status401
67+
68+
instance KnownStatus 402 where
69+
statusVal _ = status402
70+
71+
instance KnownStatus 403 where
72+
statusVal _ = status403
73+
74+
instance KnownStatus 404 where
75+
statusVal _ = status404
76+
77+
instance KnownStatus 405 where
78+
statusVal _ = status405
79+
80+
instance KnownStatus 406 where
81+
statusVal _ = status406
82+
83+
instance KnownStatus 407 where
84+
statusVal _ = status407
85+
86+
instance KnownStatus 408 where
87+
statusVal _ = status408
88+
89+
instance KnownStatus 409 where
90+
statusVal _ = status409
91+
92+
instance KnownStatus 410 where
93+
statusVal _ = status410
94+
95+
instance KnownStatus 411 where
96+
statusVal _ = status411
97+
98+
instance KnownStatus 412 where
99+
statusVal _ = status412
100+
101+
instance KnownStatus 413 where
102+
statusVal _ = status413
103+
104+
instance KnownStatus 414 where
105+
statusVal _ = status414
106+
107+
instance KnownStatus 415 where
108+
statusVal _ = status415
109+
110+
instance KnownStatus 416 where
111+
statusVal _ = status416
112+
113+
instance KnownStatus 417 where
114+
statusVal _ = status417
115+
116+
instance KnownStatus 418 where
117+
statusVal _ = status418
118+
119+
instance KnownStatus 422 where
120+
statusVal _ = status422
121+
122+
instance KnownStatus 426 where
123+
statusVal _ = status426
124+
125+
instance KnownStatus 428 where
126+
statusVal _ = status428
127+
128+
instance KnownStatus 429 where
129+
statusVal _ = status429
130+
131+
instance KnownStatus 431 where
132+
statusVal _ = status431
133+
134+
instance KnownStatus 500 where
135+
statusVal _ = status500
136+
137+
instance KnownStatus 501 where
138+
statusVal _ = status501
139+
140+
instance KnownStatus 502 where
141+
statusVal _ = status502
142+
143+
instance KnownStatus 503 where
144+
statusVal _ = status503
145+
146+
instance KnownStatus 504 where
147+
statusVal _ = status504
148+
149+
instance KnownStatus 505 where
150+
statusVal _ = status505
151+
152+
instance KnownStatus 511 where
153+
statusVal _ = status511

0 commit comments

Comments
 (0)