X-Git-Url: http://git.cielonegro.org/gitweb.cgi?p=Lucu.git;a=blobdiff_plain;f=Network%2FHTTP%2FLucu%2FStatusCode%2FInternal.hs;h=3addcf2abd748ea5125b710b56048ef6c003e6fd;hp=9269c5d07625c3f8f16251519c2a72061d76ab7a;hb=38462dd;hpb=51eda5b02d4528e2e240cbfc228de02b1c83799a diff --git a/Network/HTTP/Lucu/StatusCode/Internal.hs b/Network/HTTP/Lucu/StatusCode/Internal.hs index 9269c5d..3addcf2 100644 --- a/Network/HTTP/Lucu/StatusCode/Internal.hs +++ b/Network/HTTP/Lucu/StatusCode/Internal.hs @@ -28,6 +28,9 @@ import Prelude.Unicode -- |The type class for HTTP status codes. -- +-- Declaring types for each statuses is surely a pain. See: +-- 'statusCodes' +-- -- Minimal complete definition: 'numericCode' and 'textualStatus'. class (Eq sc, Show sc, Typeable sc) ⇒ StatusCode sc where -- |Return the 3-digit integer for this status e.g. @200@ @@ -42,7 +45,7 @@ class (Eq sc, Show sc, Typeable sc) ⇒ StatusCode sc where toStatusCode ∷ SomeStatusCode → Maybe sc toStatusCode (SomeStatusCode sc) = cast sc --- |FIXME: doc +-- |Container type for 'StatusCode' type class. data SomeStatusCode = ∀sc. StatusCode sc ⇒ SomeStatusCode sc deriving Typeable @@ -50,6 +53,8 @@ data SomeStatusCode instance Show SomeStatusCode where show (SomeStatusCode sc) = show sc +-- |Two 'StatusCode's @a@ and @b@ are said to be equivalent iff +-- @'numericCode' a == 'numericCode' b@. instance Eq SomeStatusCode where (SomeStatusCode α) == (SomeStatusCode β) = numericCode α ≡ numericCode β @@ -60,7 +65,36 @@ instance StatusCode SomeStatusCode where fromStatusCode = id toStatusCode = Just --- |FIXME: doc +-- |'QuasiQuoter' for 'StatusCode' declarations. +-- +-- Top-level splicing +-- +-- @ +-- ['statusCodes'| +-- 200 OK +-- 400 Bad Request +-- 405 Method Not Allowed +-- |] +-- @ +-- +-- becomes: +-- +-- @ +-- data OK = OK deriving ('Eq', 'Show', 'Typeable') +-- instance OK where +-- 'numericCode' _ = 200 +-- 'textualStatus' _ = 'A.unsafeFromString' \"200 OK\" +-- +-- data BadRequest = BadRequest deriving ('Eq', 'Show', 'Typeable') +-- instance BadRequest where +-- 'numericCode' _ = 400 +-- 'textualStatus' _ = 'A.unsafeFromString' \"400 Bad Request\" +-- +-- data MethodNotAllowed = MethodNotAllowed deriving ('Eq', 'Show', 'Typeable') +-- instance MethodNotAllowed where +-- 'numericCode' _ = 405 +-- 'textualStatus' _ = 'A.unsafeFromString' \"405 Method Not Allowed\" +-- @ statusCodes ∷ QuasiQuoter statusCodes = QuasiQuoter { quoteExp = const unsupported