X-Git-Url: http://git.cielonegro.org/gitweb.cgi?a=blobdiff_plain;f=Network%2FHTTP%2FLucu%2FStatusCode%2FInternal.hs;h=1d9117ceb1d3ade43416efe25ea0261a76fecb24;hb=bb41be0;hp=24988eefb2707d4e94aede4ade56f8e1a937d177;hpb=3318fe04b2d541a29228a96f69e0dcf81392a38f;p=Lucu.git diff --git a/Network/HTTP/Lucu/StatusCode/Internal.hs b/Network/HTTP/Lucu/StatusCode/Internal.hs index 24988ee..1d9117c 100644 --- a/Network/HTTP/Lucu/StatusCode/Internal.hs +++ b/Network/HTTP/Lucu/StatusCode/Internal.hs @@ -1,10 +1,13 @@ {-# LANGUAGE ExistentialQuantification , FlexibleInstances + , MultiParamTypeClasses + , OverlappingInstances , TemplateHaskell , UnicodeSyntax , ViewPatterns #-} +{-# OPTIONS_GHC -fno-warn-orphans #-} module Network.HTTP.Lucu.StatusCode.Internal ( StatusCode(..) , SomeStatusCode(..) @@ -14,11 +17,14 @@ module Network.HTTP.Lucu.StatusCode.Internal ) where import Control.Applicative -import Data.Ascii (Ascii) +import Data.Ascii (Ascii, AsciiBuilder) import qualified Data.Ascii as A import Data.Attoparsec.Char8 as P import Data.Attoparsec.Lazy as LP import qualified Data.ByteString.Lazy.Char8 as Lazy +import Data.Convertible.Base +import Data.Convertible.Instances.Ascii () +import Data.Convertible.Utils import Data.List import Language.Haskell.TH.Lib import Language.Haskell.TH.Syntax @@ -53,8 +59,8 @@ instance Eq SomeStatusCode where (SomeStatusCode α) == (SomeStatusCode β) = α ≈ β infix 4 ≈, ≉ --- |Two 'StatusCode's @a@ and @b@ are said to be equivalent iff --- @'numericCode' a '==' 'numericCode' b@. +-- |Equivalence of 'StatusCode's. Two 'StatusCode's @a@ and @b@ are +-- said to be equivalent iff @'numericCode' a '==' 'numericCode' b@. -- -- U+2248, ALMOST EQUAL TO (≈) ∷ (StatusCode α, StatusCode β) ⇒ α → β → Bool @@ -73,6 +79,22 @@ instance StatusCode SomeStatusCode where textualStatus (SomeStatusCode sc) = textualStatus sc fromStatusCode = id +instance StatusCode sc ⇒ ConvertSuccess sc Ascii where + {-# INLINE convertSuccess #-} + convertSuccess = convertSuccessVia ((⊥) ∷ AsciiBuilder) + +instance StatusCode sc ⇒ ConvertSuccess sc AsciiBuilder where + {-# INLINE convertSuccess #-} + convertSuccess = cs ∘ textualStatus + +instance StatusCode sc ⇒ ConvertAttempt sc Ascii where + {-# INLINE convertAttempt #-} + convertAttempt = return ∘ cs + +instance StatusCode sc ⇒ ConvertAttempt sc AsciiBuilder where + {-# INLINE convertAttempt #-} + convertAttempt = return ∘ cs + -- |'QuasiQuoter' for 'StatusCode' declarations. -- -- Top-level splicing