]> gitweb @ CieloNegro.org - Lucu.git/commitdiff
Each instances of StatusCode should not be an instance of Eq.
authorPHO <pho@cielonegro.org>
Mon, 7 Nov 2011 15:23:30 +0000 (00:23 +0900)
committerPHO <pho@cielonegro.org>
Mon, 7 Nov 2011 15:23:30 +0000 (00:23 +0900)
Ditz-issue: c566a8433e8af700655680f53e99cfe9f563ed32

Network/HTTP/Lucu/DefaultPage.hs
Network/HTTP/Lucu/Postprocess.hs
Network/HTTP/Lucu/Resource.hs
Network/HTTP/Lucu/Response.hs
Network/HTTP/Lucu/StatusCode.hs
Network/HTTP/Lucu/StatusCode/Internal.hs
bugs/issue-c566a8433e8af700655680f53e99cfe9f563ed32.yaml

index 8fcc37d74800cfd1a75eeeddc056d73576ab666d..1ae5abd9589bd2f697f849b5f1189ecc6e0c3bcf 100644 (file)
@@ -79,7 +79,7 @@ getMsg req res@(Response {..})
     -- 1xx responses don't have a body.
     -- 2xx responses don't need a body to be completed.
     -- 3xx:
-    | toStatusCode resStatus ≡ Just MovedPermanently
+    | resStatus ≈ MovedPermanently
         = txt ("The resource at " ⧺ path ⧺ " has been moved to ")
           <+>
           eelem "a" += sattr "href" loc
@@ -87,7 +87,7 @@ getMsg req res@(Response {..})
           <+>
           txt " permanently."
 
-    | toStatusCode resStatus ≡ Just Found
+    | resStatus ≈ Found
         = txt ("The resource at " ⧺ path ⧺ " is currently located at ")
           <+>
           eelem "a" += sattr "href" loc
@@ -95,7 +95,7 @@ getMsg req res@(Response {..})
           <+>
           txt ". This is not a permanent relocation."
 
-    | toStatusCode resStatus ≡ Just SeeOther
+    | resStatus ≈ SeeOther
         = txt ("The resource at " ⧺ path ⧺ " can be found at ")
           <+>
           eelem "a" += sattr "href" loc
@@ -103,7 +103,7 @@ getMsg req res@(Response {..})
           <+>
           txt "."
 
-    | toStatusCode resStatus ≡ Just TemporaryRedirect
+    | resStatus ≈ TemporaryRedirect
         = txt ("The resource at " ⧺ path ⧺ " is temporarily located at ")
           <+>
           eelem "a" += sattr "href" loc
@@ -112,25 +112,25 @@ getMsg req res@(Response {..})
           txt "."
 
       -- 4xx:
-    | toStatusCode resStatus ≡ Just BadRequest
+    | resStatus ≈ BadRequest
         = txt "The server could not understand the request you sent."
-    | toStatusCode resStatus ≡ Just Unauthorized
+    | resStatus ≈ Unauthorized
         = txt ("You need a valid authentication to access " ⧺ path)
-    | toStatusCode resStatus ≡ Just Forbidden
+    | resStatus ≈ Forbidden
         = txt ("You don't have permission to access " ⧺ path)
-    | toStatusCode resStatus ≡ Just NotFound
+    | resStatus ≈ NotFound
         = txt ("The requested URL " ⧺ path ⧺ " was not found on this server.")
-    | toStatusCode resStatus ≡ Just Gone
+    | resStatus ≈ Gone
         = txt ("The resource at " ⧺ path ⧺ " was here in past times, but has gone permanently.")
-    | toStatusCode resStatus ≡ Just RequestEntityTooLarge
+    | resStatus ≈ RequestEntityTooLarge
         = txt ("The request entity you sent for " ⧺ path ⧺ " was too large to accept.")
-    | toStatusCode resStatus ≡ Just RequestURITooLarge
+    | resStatus ≈ RequestURITooLarge
         = txt "The request URI you sent was too large to accept."
 
       -- 5xx:
-    | toStatusCode resStatus ≡ Just InternalServerError
+    | resStatus ≈ InternalServerError
         = txt ("An internal server error has occured during the process of your request to " ⧺ path)
-    | toStatusCode resStatus ≡ Just ServiceUnavailable
+    | resStatus ≈ ServiceUnavailable
         = txt "The service is temporarily unavailable. Try later."
 
     | otherwise
index 29c3c5167cb375accbce646038b110a4a0b0b601..09665c62c4fe9e2c6f8ee398fbcc1a9c53f5cfb4 100644 (file)
@@ -47,15 +47,15 @@ abortOnCertainConditions (NI {..})
                    $ A.toAsciiBuilder "Inappropriate status code for a response: "
                    ⊕ printStatusCode resStatus
 
-               when ( toStatusCode resStatus ≡ Just MethodNotAllowed ∧
-                      hasHeader "Allow" res )
+               when ( resStatus ≈ MethodNotAllowed ∧
+                      hasHeader "Allow" res        )
                    $ abort'
                    $ A.toAsciiBuilder "The status was "
                    ⊕ printStatusCode resStatus
                    ⊕ A.toAsciiBuilder " but no \"Allow\" header."
 
-               when ( toStatusCode resStatus ≢ Just NotModified  ∧
-                      isRedirection resStatus ∧
+               when ( resStatus ≉ NotModified  ∧
+                      isRedirection resStatus  
                       hasHeader "Location" res )
                    $ abort'
                    $ A.toAsciiBuilder "The status code was "
index f7b90f925447a774d303b90458487611837d6562..97b2cbe3cb491c4b64853fe6a60bfab0895ca171 100644 (file)
@@ -161,7 +161,6 @@ import Data.Text (Text)
 import qualified Data.Text as T
 import Data.Time
 import qualified Data.Time.HTTP as HTTP
-import Data.Typeable
 import Network.HTTP.Lucu.Abortion
 import Network.HTTP.Lucu.Authentication
 import Network.HTTP.Lucu.Config
@@ -615,7 +614,7 @@ getForm limit
 -- 'isRedirection' or it raises an error.
 redirect ∷ StatusCode sc ⇒ sc → URI → Resource ()
 redirect sc uri
-    = do when (cast sc ≡ Just NotModified ∨ (¬) (isRedirection sc))
+    = do when (sc ≈ NotModified ∨ (¬) (isRedirection sc))
              $ abort
              $ mkAbortion' InternalServerError
              $ A.toText
index 0ebfa71080647983d95d428fa6bda605239c1185..191cebd3deaa7d5191ea5b02ac2ab411b3b4ba51 100644 (file)
@@ -19,6 +19,8 @@ module Network.HTTP.Lucu.Response
     , printStatusCode
     , printResponse
 
+    , (≈)
+    , (≉)
     , isInformational
     , isSuccessful
     , isRedirection
@@ -66,11 +68,11 @@ emptyResponse sc
 resCanHaveBody ∷ Response → Bool
 {-# INLINEABLE resCanHaveBody #-}
 resCanHaveBody (Response {..})
-    | isInformational resStatus                  = False
-    | toStatusCode resStatus ≡ Just NoContent    = False
-    | toStatusCode resStatus ≡ Just ResetContent = False
-    | toStatusCode resStatus ≡ Just NotModified  = False
-    | otherwise                                  = True
+    | isInformational resStatus = False
+    | resStatus ≈ NoContent     = False
+    | resStatus ≈ ResetContent  = False
+    | resStatus ≈ NotModified   = False
+    | otherwise                 = True
 
 -- |Convert a 'Response' to 'AsciiBuilder'.
 printResponse ∷ Response → AsciiBuilder
index 950d96416a71b6a21e0c7ce86cbaf46ce563c158..2dd38630c2b1e83d61d3c643199d58bb1b046e89 100644 (file)
@@ -1,6 +1,5 @@
 {-# LANGUAGE
-    DeriveDataTypeable
-  , QuasiQuotes
+    QuasiQuotes
   #-}
 -- |Definition of HTTP status code.
 -- 'Network.HTTP.Lucu.Resource.setStatus' accepts these named status
@@ -70,7 +69,6 @@ module Network.HTTP.Lucu.StatusCode
     , NotExtended(..)
     )
     where
-import Data.Typeable
 import Network.HTTP.Lucu.StatusCode.Internal
 
 [statusCodes|
index 3addcf2abd748ea5125b710b56048ef6c003e6fd..24988eefb2707d4e94aede4ade56f8e1a937d177 100644 (file)
@@ -1,6 +1,5 @@
 {-# LANGUAGE
-    DeriveDataTypeable
-  , ExistentialQuantification
+    ExistentialQuantification
   , FlexibleInstances
   , TemplateHaskell
   , UnicodeSyntax
@@ -9,6 +8,8 @@
 module Network.HTTP.Lucu.StatusCode.Internal
     ( StatusCode(..)
     , SomeStatusCode(..)
+    , (≈)
+    , (≉)
     , statusCodes
     )
     where
@@ -19,7 +20,6 @@ import Data.Attoparsec.Char8 as P
 import Data.Attoparsec.Lazy as LP
 import qualified Data.ByteString.Lazy.Char8 as Lazy
 import Data.List
-import Data.Typeable
 import Language.Haskell.TH.Lib
 import Language.Haskell.TH.Syntax
 import Language.Haskell.TH.Quote
@@ -32,7 +32,7 @@ import Prelude.Unicode
 -- 'statusCodes'
 --
 -- Minimal complete definition: 'numericCode' and 'textualStatus'.
-class (Eq sc, Show sc, Typeable sc) ⇒ StatusCode sc where
+class Show sc ⇒ StatusCode sc where
     -- |Return the 3-digit integer for this status e.g. @200@
     numericCode ∷ sc → Int
     -- |Return the combination of 3-digit integer and reason phrase
@@ -41,29 +41,37 @@ class (Eq sc, Show sc, Typeable sc) ⇒ StatusCode sc where
     -- |Wrap the status code into 'SomeStatusCode'.
     fromStatusCode ∷ sc → SomeStatusCode
     fromStatusCode = SomeStatusCode
-    -- |Cast the status code from 'SomeStatusCode'.
-    toStatusCode ∷ SomeStatusCode → Maybe sc
-    toStatusCode (SomeStatusCode sc) = cast sc
 
 -- |Container type for 'StatusCode' type class.
 data SomeStatusCode
     = ∀sc. StatusCode sc ⇒ SomeStatusCode sc
-      deriving Typeable
 
 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 β
+    (SomeStatusCode α) == (SomeStatusCode β) = α ≈ β
+
+infix 4 ≈, ≉
+-- |Two 'StatusCode's @a@ and @b@ are said to be equivalent iff
+-- @'numericCode' a '==' 'numericCode' b@.
+--
+-- U+2248, ALMOST EQUAL TO
+(≈) ∷ (StatusCode α, StatusCode β) ⇒ α → β → Bool
+{-# INLINE (≈) #-}
+α ≈ β = numericCode α ≡ numericCode β
+
+-- |@(a &#x2249; b) '==' 'not' (a &#x2248; b)@
+--
+-- U+2249, NOT ALMOST EQUAL TO
+(≉) ∷ (StatusCode α, StatusCode β) ⇒ α → β → Bool
+{-# INLINE (≉) #-}
+(≉) = ((¬) ∘) ∘ (≈)
 
 instance StatusCode SomeStatusCode where
     numericCode   (SomeStatusCode sc) = numericCode   sc
     textualStatus (SomeStatusCode sc) = textualStatus sc
     fromStatusCode = id
-    toStatusCode   = Just
 
 -- |'QuasiQuoter' for 'StatusCode' declarations.
 --
@@ -80,17 +88,17 @@ instance StatusCode SomeStatusCode where
 -- becomes:
 --
 -- @
---   data OK = OK deriving ('Eq', 'Show', 'Typeable')
+--   data OK = OK deriving ('Show')
 --   instance OK where
 --     'numericCode'   _ = 200
 --     'textualStatus' _ = 'A.unsafeFromString' \"200 OK\"
 --
---   data BadRequest = BadRequest deriving ('Eq', 'Show', 'Typeable')
+--   data BadRequest = BadRequest deriving ('Show')
 --   instance BadRequest where
 --     'numericCode'   _ = 400
 --     'textualStatus' _ = 'A.unsafeFromString' \"400 Bad Request\"
 --
---   data MethodNotAllowed = MethodNotAllowed deriving ('Eq', 'Show', 'Typeable')
+--   data MethodNotAllowed = MethodNotAllowed deriving ('Show')
 --   instance MethodNotAllowed where
 --     'numericCode'   _ = 405
 --     'textualStatus' _ = 'A.unsafeFromString' \"405 Method Not Allowed\"
@@ -148,14 +156,7 @@ statusDecl (num, phrase)
       name = mkName $ concatMap A.toString phrase
 
       dataDecl ∷ Q Dec
-      dataDecl = dataD (cxt [])
-                       name
-                       []
-                       [con]
-                       [ mkName "Eq"
-                       , mkName "Show"
-                       , mkName "Typeable"
-                       ]
+      dataDecl = dataD (cxt []) name [] [con] [''Show]
 
       instanceDecl ∷ Q [Dec]
       instanceDecl
index a6fce9cbc25cc6a8d8c0a94d179d93163afc97a7..3f8ad94ee46f006eaee0d36ecb6c9d40303f2f8c 100644 (file)
@@ -24,4 +24,12 @@ log_events:
   - PHO <pho@cielonegro.org>
   - closed with disposition fixed
   - Done.
+- - 2011-11-07 02:03:42.159681 Z
+  - PHO <pho@cielonegro.org>
+  - changed status from closed to in_progress
+  - Each instances of StatusCode should not be an instance of Eq.
+- - 2011-11-07 15:23:25.827332 Z
+  - PHO <pho@cielonegro.org>
+  - closed with disposition fixed
+  - Done.
 git_branch: template-haskell