]> gitweb @ CieloNegro.org - Lucu.git/commitdiff
Code clean-up using convertible-text.
authorPHO <pho@cielonegro.org>
Mon, 19 Dec 2011 12:17:28 +0000 (21:17 +0900)
committerPHO <pho@cielonegro.org>
Mon, 19 Dec 2011 12:17:28 +0000 (21:17 +0900)
Ditz-issue: 0a2a377be55430e655ab42fdc4902fa56a058b26

12 files changed:
Network/HTTP/Lucu/Config.hs
Network/HTTP/Lucu/Headers.hs
Network/HTTP/Lucu/MIMEParams.hs
Network/HTTP/Lucu/MIMEType.hs
Network/HTTP/Lucu/MIMEType/Guess.hs
Network/HTTP/Lucu/MultipartForm.hs
Network/HTTP/Lucu/Preprocess.hs
Network/HTTP/Lucu/RequestReader.hs
Network/HTTP/Lucu/Resource.hs
Network/HTTP/Lucu/Resource/Internal.hs
Network/HTTP/Lucu/StaticFile.hs
Network/HTTP/Lucu/Utils.hs

index 366a63cb1aab9bad37f96cd9eb4f5d701fff01e6..d1afdc07058464f903a79e8fe5fcc7039099ed02 100644 (file)
@@ -14,9 +14,10 @@ module Network.HTTP.Lucu.Config
 import Data.Ascii (Ascii)
 import Data.CaseInsensitive (CI)
 import qualified Data.CaseInsensitive as CI
 import Data.Ascii (Ascii)
 import Data.CaseInsensitive (CI)
 import qualified Data.CaseInsensitive as CI
+import Data.Convertible.Base
+import Data.Convertible.Instances.Text ()
 import Data.Default
 import Data.Text (Text)
 import Data.Default
 import Data.Text (Text)
-import qualified Data.Text as T
 import Network
 import Network.BSD
 import Network.HTTP.Lucu.MIMEType.Guess
 import Network
 import Network.BSD
 import Network.HTTP.Lucu.MIMEType.Guess
@@ -108,7 +109,7 @@ data SSLConfig
 instance Default Config where
     def = Config {
             cnfServerSoftware              = "Lucu/1.0"
 instance Default Config where
     def = Config {
             cnfServerSoftware              = "Lucu/1.0"
-          , cnfServerHost                  = CI.mk ∘ T.pack $ unsafePerformIO getHostName
+          , cnfServerHost                  = CI.mk ∘ cs $ unsafePerformIO getHostName
           , cnfServerPort                  = "http"
           , cnfServerV4Addr                = Just "0.0.0.0"
           , cnfServerV6Addr                = Just "::"
           , cnfServerPort                  = "http"
           , cnfServerV4Addr                = Just "0.0.0.0"
           , cnfServerV6Addr                = Just "::"
index e56567e7d665b191a96d08b75dfab9bc781f614c..f0e6ad8958bf056c30f41767263469c51a65922f 100644 (file)
@@ -57,7 +57,7 @@ class HasHeaders a where
 
     getCIHeader ∷ CIAscii → a → Maybe CIAscii
     {-# INLINE getCIHeader #-}
 
     getCIHeader ∷ CIAscii → a → Maybe CIAscii
     {-# INLINE getCIHeader #-}
-    getCIHeader = ((A.toCIAscii <$>) ∘) ∘ getHeader
+    getCIHeader = ((cs <$>) ∘) ∘ getHeader
 
     deleteHeader ∷ CIAscii → a → a
     {-# INLINE deleteHeader #-}
 
     deleteHeader ∷ CIAscii → a → a
     {-# INLINE deleteHeader #-}
@@ -145,7 +145,7 @@ headers = do xs ← many header
              return $ fromFoldable xs
     where
       header ∷ Parser (CIAscii, Ascii)
              return $ fromFoldable xs
     where
       header ∷ Parser (CIAscii, Ascii)
-      header = do name ← A.toCIAscii <$> token
+      header = do name ← cs <$> token
                   void $ char ':'
                   skipMany lws
                   values ← content `sepBy` try lws
                   void $ char ':'
                   skipMany lws
                   values ← content `sepBy` try lws
@@ -161,7 +161,7 @@ headers = do xs ← many header
 
       joinValues ∷ [Ascii] → Ascii
       {-# INLINE joinValues #-}
 
       joinValues ∷ [Ascii] → Ascii
       {-# INLINE joinValues #-}
-      joinValues = A.fromAsciiBuilder
+      joinValues = cs
                    ∘ mconcat
                    ∘ mconcat
-                   ∘ intersperse (A.toAsciiBuilder "\x20")
-                   ∘ (A.toAsciiBuilder <$>)
+                   ∘ intersperse (cs ("\x20" ∷ Ascii) ∷ AsciiBuilder)
+                   ∘ (cs <$>)
index 88dbb6fdd71a47bdc832cca03dc4b36797f3230b..6f9eb7e1b8a9f4055b0bc878578d6b2679952991 100644 (file)
@@ -168,7 +168,7 @@ paramP = do skipMany lws
                        return $ AsciiParam name sect payload
 
 nameP ∷ Parser (CIAscii, Integer, Bool)
                        return $ AsciiParam name sect payload
 
 nameP ∷ Parser (CIAscii, Integer, Bool)
-nameP = do name      ← (A.toCIAscii ∘ A.unsafeFromByteString) <$>
+nameP = do name      ← (cs ∘ A.unsafeFromByteString) <$>
                        takeWhile1 (\c → isToken c ∧ c ≢ '*')
            sect      ← option 0     $ try (char '*' *> decimal  )
            isEncoded ← option False $ try (char '*' *> pure True)
                        takeWhile1 (\c → isToken c ∧ c ≢ '*')
            sect      ← option 0     $ try (char '*' *> decimal  )
            isEncoded ← option False $ try (char '*' *> pure True)
@@ -190,7 +190,7 @@ initialEncodedValue
              return (charset, payload)
     where
       metadata ∷ Parser CIAscii
              return (charset, payload)
     where
       metadata ∷ Parser CIAscii
-      metadata = (A.toCIAscii ∘ A.unsafeFromByteString) <$>
+      metadata = (cs ∘ A.unsafeFromByteString) <$>
                  takeWhile (\c → c ≢ '\'' ∧ isToken c)
 
 encodedPayload ∷ Parser BS.ByteString
                  takeWhile (\c → c ≢ '\'' ∧ isToken c)
 
 encodedPayload ∷ Parser BS.ByteString
@@ -257,7 +257,7 @@ sortBySection = flip go (∅)
                            → fail (concat [ "Duplicate section "
                                           , show $ section x
                                           , " for parameter '"
                            → fail (concat [ "Duplicate section "
                                           , show $ section x
                                           , " for parameter '"
-                                          , A.toString $ A.fromCIAscii $ epName x
+                                          , cs $ epName x
                                           , "'"
                                           ])
 
                                           , "'"
                                           ])
 
@@ -280,7 +280,7 @@ decodeSections = (decodeSeq =≪) ∘ flip (flip toSeq 0) (∅)
                         → fail (concat [ "Missing section "
                                        , show $ section p
                                        , " for parameter '"
                         → fail (concat [ "Missing section "
                                        , show $ section p
                                        , " for parameter '"
-                                       , A.toString $ A.fromCIAscii $ epName p
+                                       , cs $ epName p
                                        , "'"
                                        ])
 
                                        , "'"
                                        ])
 
@@ -296,9 +296,7 @@ decodeSections = (decodeSeq =≪) ∘ flip (flip toSeq 0) (∅)
               Just (ContinuedEncodedParam {..}, _)
                   → fail "decodeSeq: internal error: CEP at section 0"
               Just (AsciiParam {..}, xs)
               Just (ContinuedEncodedParam {..}, _)
                   → fail "decodeSeq: internal error: CEP at section 0"
               Just (AsciiParam {..}, xs)
-                  → let t = A.toText apPayload
-                    in
-                      decodeSeq' Nothing xs $ singleton t
+                  → decodeSeq' Nothing xs $ singleton $ cs apPayload
 
       decodeSeq' ∷ Monad m
                  ⇒ Maybe Decoder
 
       decodeSeq' ∷ Monad m
                  ⇒ Maybe Decoder
@@ -320,13 +318,11 @@ decodeSections = (decodeSeq =≪) ∘ flip (flip toSeq 0) (∅)
                            → fail (concat [ "Section "
                                           , show epSection
                                           , " for parameter '"
                            → fail (concat [ "Section "
                                           , show epSection
                                           , " for parameter '"
-                                          , A.toString $ A.fromCIAscii epName
+                                          , cs epName
                                           , "' is encoded but its first section is not"
                                           ])
               Just (AsciiParam {..}, xs)
                                           , "' is encoded but its first section is not"
                                           ])
               Just (AsciiParam {..}, xs)
-                  → let t = A.toText apPayload
-                    in
-                      decodeSeq' decoder xs $ chunks ⊳ t
+                  → decodeSeq' decoder xs $ chunks ⊳ cs apPayload
 
 type Decoder = BS.ByteString → Either UnicodeException Text
 
 
 type Decoder = BS.ByteString → Either UnicodeException Text
 
@@ -340,5 +336,4 @@ getDecoder ∷ Monad m ⇒ CIAscii → m Decoder
 getDecoder charset
     | charset ≡ "UTF-8"    = return decodeUtf8'
     | charset ≡ "US-ASCII" = return decodeUtf8'
 getDecoder charset
     | charset ≡ "UTF-8"    = return decodeUtf8'
     | charset ≡ "US-ASCII" = return decodeUtf8'
-    | otherwise            = fail $ "No decoders found for charset: "
-                                  ⧺ A.toString (A.fromCIAscii charset)
+    | otherwise            = fail $ "No decoders found for charset: " ⊕ cs charset
index 1c448eedecde5435e0889cffdd49d126df7bc25e..250fdbfc4033a3268412e1b933d2bca37f308918 100644 (file)
@@ -17,8 +17,7 @@ module Network.HTTP.Lucu.MIMEType
     where
 import Control.Applicative
 import Data.Ascii (Ascii, AsciiBuilder, CIAscii)
     where
 import Control.Applicative
 import Data.Ascii (Ascii, AsciiBuilder, CIAscii)
-import qualified Data.Ascii as A
-import Data.Attoparsec.Char8 as P
+import Data.Attoparsec.Char8
 import Data.Convertible.Base
 import Data.Convertible.Instances.Ascii ()
 import Data.Convertible.Utils
 import Data.Convertible.Base
 import Data.Convertible.Instances.Ascii ()
 import Data.Convertible.Utils
@@ -77,9 +76,9 @@ instance ConvertAttempt Ascii MIMEType where
 -- |'Parser' for an 'MIMEType'.
 mimeType ∷ Parser MIMEType
 {-# INLINEABLE mimeType #-}
 -- |'Parser' for an 'MIMEType'.
 mimeType ∷ Parser MIMEType
 {-# INLINEABLE mimeType #-}
-mimeType = do media  ← A.toCIAscii <$> token
+mimeType = do media  ← cs <$> token
               _      ← char '/'
               _      ← char '/'
-              sub    ← A.toCIAscii <$> token
+              sub    ← cs <$> token
               params ← mimeParams
               return $ MIMEType media sub params
 
               params ← mimeParams
               return $ MIMEType media sub params
 
index 6a791e4d15792a5aaff5a4504ceb6e10930e7a22..cd178dec2afb18402169b2f316dd8c067f65b88e 100644 (file)
@@ -20,6 +20,8 @@ import Control.Applicative
 import Data.Attoparsec.Char8
 import qualified Data.Attoparsec.Lazy as LP
 import qualified Data.ByteString.Lazy.Char8 as Lazy
 import Data.Attoparsec.Char8
 import qualified Data.Attoparsec.Lazy as LP
 import qualified Data.ByteString.Lazy.Char8 as Lazy
+import Data.Convertible.Base
+import Data.Convertible.Instances.Text ()
 import qualified Data.Map as M
 import Data.Map (Map)
 import Data.Typeable
 import qualified Data.Map as M
 import Data.Map (Map)
 import Data.Typeable
@@ -27,7 +29,6 @@ import Data.List
 import Data.Monoid
 import Data.Monoid.Unicode
 import Data.Text (Text)
 import Data.Monoid
 import Data.Monoid.Unicode
 import Data.Text (Text)
-import qualified Data.Text as T
 import Data.Text.Encoding
 import Language.Haskell.TH.Syntax
 import Language.Haskell.TH.Quote
 import Data.Text.Encoding
 import Language.Haskell.TH.Syntax
 import Language.Haskell.TH.Quote
@@ -137,4 +138,4 @@ guessTypeByFileName ∷ ExtMap → FilePath → Maybe MIMEType
 guessTypeByFileName (ExtMap m) fpath
     = case takeExtension fpath of
         []      → Nothing
 guessTypeByFileName (ExtMap m) fpath
     = case takeExtension fpath of
         []      → Nothing
-        (_:ext) → M.lookup (T.pack ext) m
+        (_:ext) → M.lookup (cs ext) m
index 882ff76668dc60bcb721eaefd83f1d4555d5303a..2d1b3470f1cf62a797a1336c183e8d54999589b9 100644 (file)
@@ -23,7 +23,7 @@ import Control.Applicative.Unicode hiding ((∅))
 import Control.Monad.Error (MonadError, throwError)
 import Control.Monad.Unicode
 import Data.Ascii (Ascii, CIAscii, AsciiBuilder)
 import Control.Monad.Error (MonadError, throwError)
 import Control.Monad.Unicode
 import Data.Ascii (Ascii, CIAscii, AsciiBuilder)
-import qualified Data.Ascii as A
+import Data.Attempt
 import Data.Attoparsec
 import qualified Data.Attoparsec.Lazy as LP
 import qualified Data.ByteString as BS
 import Data.Attoparsec
 import qualified Data.Attoparsec.Lazy as LP
 import qualified Data.ByteString as BS
@@ -38,7 +38,6 @@ import Data.Maybe
 import Data.Monoid.Unicode
 import Data.Sequence (Seq)
 import Data.Text (Text)
 import Data.Monoid.Unicode
 import Data.Sequence (Seq)
 import Data.Text (Text)
-import qualified Data.Text as T
 import Network.HTTP.Lucu.Headers
 import Network.HTTP.Lucu.MIMEParams
 import Network.HTTP.Lucu.MIMEType (MIMEType)
 import Network.HTTP.Lucu.Headers
 import Network.HTTP.Lucu.MIMEParams
 import Network.HTTP.Lucu.MIMEType (MIMEType)
@@ -136,7 +135,7 @@ prologue ∷ Ascii → Parser ()
 prologue boundary
     = ( (string "--" <?> "prefix")
         *>
 prologue boundary
     = ( (string "--" <?> "prefix")
         *>
-        (string (A.toByteString boundary) <?> "boundary")
+        (string (cs boundary) <?> "boundary")
         *>
         pure ()
       )
         *>
         pure ()
       )
@@ -180,16 +179,16 @@ getContDispo hdrs
         Nothing
             → throwError "Content-Disposition is missing"
         Just str
         Nothing
             → throwError "Content-Disposition is missing"
         Just str
-            → case parseOnly (finishOff contentDisposition) $ A.toByteString str of
+            → case parseOnly (finishOff contentDisposition) $ cs str of
                  Right  d → return d
                  Left err → throwError $ "malformed Content-Disposition: "
                  Right  d → return d
                  Left err → throwError $ "malformed Content-Disposition: "
-                                       â§º A.toString str
-                                       â§º ": "
-                                       â§º err
+                                       â\8a\95 cs str
+                                       â\8a\95 ": "
+                                       â\8a\95 err
 
 contentDisposition ∷ Parser ContDispo
 contentDisposition
 
 contentDisposition ∷ Parser ContDispo
 contentDisposition
-    = (ContDispo <$> (A.toCIAscii <$> token) ⊛ mimeParams)
+    = (ContDispo <$> (cs <$> token) ⊛ mimeParams)
       <?>
       "contentDisposition"
 
       <?>
       "contentDisposition"
 
@@ -200,19 +199,19 @@ getContType hdrs
         Nothing
             → return Nothing
         Just str
         Nothing
             → return Nothing
         Just str
-            → case parseOnly (finishOff MT.mimeType) $ A.toByteString str of
+            → case parseOnly (finishOff MT.mimeType) $ cs str of
                  Right  d → return $ Just d
                  Left err → throwError $ "malformed Content-Type: "
                  Right  d → return $ Just d
                  Left err → throwError $ "malformed Content-Type: "
-                                       â§º A.toString str
-                                       â§º ": "
-                                       â§º err
+                                       â\8a\95 cs str
+                                       â\8a\95 ": "
+                                       â\8a\95 err
 
 getBody ∷ MonadError String m
         ⇒ Ascii
         → LS.ByteString
         → m (LS.ByteString, LS.ByteString)
 {-# INLINEABLE getBody #-}
 
 getBody ∷ MonadError String m
         ⇒ Ascii
         → LS.ByteString
         → m (LS.ByteString, LS.ByteString)
 {-# INLINEABLE getBody #-}
-getBody (("\r\n--" ⊕) ∘ A.toByteString → boundary) src
+getBody (("\r\n--" ⊕) ∘ cs → boundary) src
     = case breakOn boundary src of
         (before, after)
             | LS.null after
     = case breakOn boundary src of
         (before, after)
             | LS.null after
@@ -236,17 +235,16 @@ partToFormPair pt@(Part {..})
              return (name, fd)
     | otherwise
         = throwError $ "disposition type is not \"form-data\": "
              return (name, fd)
     | otherwise
         = throwError $ "disposition type is not \"form-data\": "
-                     â§º A.toString (A.fromCIAscii $ dType ptContDispo)
+                     â\8a\95 cs (dType ptContDispo)
 
 partName ∷ MonadError String m ⇒ Part → m Ascii
 {-# INLINEABLE partName #-}
 partName (Part {..})
     = case lookup "name" $ dParams ptContDispo of
         Just name
 
 partName ∷ MonadError String m ⇒ Part → m Ascii
 {-# INLINEABLE partName #-}
 partName (Part {..})
     = case lookup "name" $ dParams ptContDispo of
         Just name
-            → case A.fromText name of
-                 Just a  → return a
-                 Nothing → throwError $ "Non-ascii part name: "
-                                      ⧺ T.unpack name
+            → case ca name of
+                 Success a → return a
+                 Failure e → throwError $ show e
         Nothing
             → throwError $ "form-data without name: "
                          ⊕ convertSuccessVia ((⊥) ∷ Ascii) ptContDispo
         Nothing
             → throwError $ "form-data without name: "
                          ⊕ convertSuccessVia ((⊥) ∷ Ascii) ptContDispo
index 77047273c43564feddc2ef688be16eb652f57d73..de519da58ea013412f8862889c8e2556d7eacd6b 100644 (file)
@@ -19,9 +19,9 @@ import qualified Data.ByteString.Char8 as C8
 import Data.CaseInsensitive (CI)
 import qualified Data.CaseInsensitive as CI
 import Data.Convertible.Base
 import Data.CaseInsensitive (CI)
 import qualified Data.CaseInsensitive as CI
 import Data.Convertible.Base
+import Data.Convertible.Instances.Text ()
 import Data.Maybe
 import Data.Text (Text)
 import Data.Maybe
 import Data.Text (Text)
-import qualified Data.Text as T
 import qualified Data.Text.Encoding as T
 import Network.HTTP.Lucu.Headers
 import Network.HTTP.Lucu.HttpVersion
 import qualified Data.Text.Encoding as T
 import Network.HTTP.Lucu.Headers
 import Network.HTTP.Lucu.HttpVersion
@@ -151,7 +151,7 @@ updateAuthority host port req
           uri' = uri {
                    uriAuthority = Just URIAuth {
                                     uriUserInfo = ""
           uri' = uri {
                    uriAuthority = Just URIAuth {
                                     uriUserInfo = ""
-                                  , uriRegName  = T.unpack $ CI.original host
+                                  , uriRegName  = cs $ CI.original host
                                   , uriPort     = cs port
                                   }
                  }
                                   , uriPort     = cs port
                                   }
                  }
index 2cdc45dc472a42e284472badd85df1f31582c9f5..6c5070b5738c0e54d4bce48f809219f6db97eb93 100644 (file)
@@ -18,11 +18,12 @@ import Control.Monad.Trans.Maybe
 import qualified Data.Attoparsec.Lazy as LP
 import qualified Data.ByteString as Strict
 import qualified Data.ByteString.Lazy as Lazy
 import qualified Data.Attoparsec.Lazy as LP
 import qualified Data.ByteString as Strict
 import qualified Data.ByteString.Lazy as Lazy
+import Data.Convertible.Base
+import Data.Convertible.Instances.Text ()
 import Data.List
 import Data.Maybe
 import Data.Monoid.Unicode
 import qualified Data.Sequence as S
 import Data.List
 import Data.Maybe
 import Data.Monoid.Unicode
 import qualified Data.Sequence as S
-import qualified Data.Text as T
 import Network.HTTP.Lucu.Abortion
 import Network.HTTP.Lucu.Config
 import Network.HTTP.Lucu.Chunk
 import Network.HTTP.Lucu.Abortion
 import Network.HTTP.Lucu.Config
 import Network.HTTP.Lucu.Chunk
@@ -298,11 +299,11 @@ chunkWasMalformed tid eCtx e msg
     = let abo = mkAbortion BadRequest [("Connection", "close")]
                 $ Just
                 $ "chunkWasMalformed: "
     = let abo = mkAbortion BadRequest [("Connection", "close")]
                 $ Just
                 $ "chunkWasMalformed: "
-                ⊕ T.pack msg
+                ⊕ cs msg
                 ⊕ ": "
                 ⊕ ": "
-                ⊕ T.pack (intercalate ", " eCtx)
+                ⊕ cs (intercalate ", " eCtx)
                 ⊕ ": "
                 ⊕ ": "
-                ⊕ T.pack e
+                ⊕ cs e
       in
         throwTo tid abo
 
       in
         throwTo tid abo
 
index 852860b278489df97143eaa64ccf41a09c98a02a..8585ceaf29ce993f6a1a002ed41c61d3f5c18f1e 100644 (file)
@@ -165,7 +165,6 @@ import Data.Monoid.Unicode
 import Data.Proxy
 import Data.Tagged
 import Data.Text (Text)
 import Data.Proxy
 import Data.Tagged
 import Data.Text (Text)
-import qualified Data.Text as T
 import Data.Time
 import Data.Time.Format.HTTP
 import Network.HTTP.Lucu.Abortion
 import Data.Time
 import Data.Time.Format.HTTP
 import Network.HTTP.Lucu.Abortion
@@ -555,7 +554,7 @@ getChunks' limit = go limit (∅)
                     else
                         abort $ mkAbortion' RequestEntityTooLarge
                               $ "Request body must be smaller than "
                     else
                         abort $ mkAbortion' RequestEntityTooLarge
                               $ "Request body must be smaller than "
-                              ⊕ T.pack (show limit)
+                              ⊕ cs (show limit)
                               ⊕ " bytes."
       go !n !b = do c ← getChunk $ min n BB.defaultBufferSize
                     if Strict.null c then
                               ⊕ " bytes."
       go !n !b = do c ← getChunk $ min n BB.defaultBufferSize
                     if Strict.null c then
@@ -613,7 +612,7 @@ getForm limit
                                                   $ "Malformed boundary: " ⊕ boundary
                        case parseMultipartFormData b src of
                          Right xs → return $ map (first cs) xs
                                                   $ "Malformed boundary: " ⊕ boundary
                        case parseMultipartFormData b src of
                          Right xs → return $ map (first cs) xs
-                         Left err → abort $ mkAbortion' BadRequest $ T.pack err
+                         Left err → abort $ mkAbortion' BadRequest $ cs err
 
 -- |@'redirect' code uri@ declares the response status as @code@ and
 -- \"Location\" header field as @uri@. The @code@ must satisfy
 
 -- |@'redirect' code uri@ declares the response status as @code@ and
 -- \"Location\" header field as @uri@. The @code@ must satisfy
index 9feca7edf6e3b6401fc7e4306705a420553fe016..1993eb251deafdb09dbb98f0916601b581dc5a15 100644 (file)
@@ -47,11 +47,11 @@ import Data.ByteString (ByteString)
 import qualified Data.ByteString as BS
 import Data.Collections
 import Data.Convertible.Base
 import qualified Data.ByteString as BS
 import Data.Collections
 import Data.Convertible.Base
+import Data.Convertible.Instances.Text ()
 import Data.List (intersperse, nub)
 import Data.Maybe
 import Data.Monoid
 import Data.Monoid.Unicode
 import Data.List (intersperse, nub)
 import Data.Maybe
 import Data.Monoid
 import Data.Monoid.Unicode
-import qualified Data.Text as T
 import Network.HTTP.Lucu.Abortion
 import Network.HTTP.Lucu.Abortion.Internal
 import Network.HTTP.Lucu.Config
 import Network.HTTP.Lucu.Abortion
 import Network.HTTP.Lucu.Abortion.Internal
 import Network.HTTP.Lucu.Config
@@ -202,7 +202,7 @@ spawnRsrc (Resource {..}) ni@(NI {..})
       toAbortion e
           = case fromException e of
               Just abortion → abortion
       toAbortion e
           = case fromException e of
               Just abortion → abortion
-              Nothing       → mkAbortion' InternalServerError $ T.pack $ show e
+              Nothing       → mkAbortion' InternalServerError $ cs $ show e
 
       processException ∷ SomeException → IO ()
       processException exc
 
       processException ∷ SomeException → IO ()
       processException exc
index a1b611506f557f8893a27155b992158c78ad5b9e..6dd47af6ff465c278842b8947a9180320ea7efca 100644 (file)
@@ -15,6 +15,8 @@ import Control.Monad.Unicode
 import Control.Monad.Trans
 import Data.ByteString (ByteString)
 import qualified Data.ByteString.Lazy.Char8 as LBS
 import Control.Monad.Trans
 import Data.ByteString (ByteString)
 import qualified Data.ByteString.Lazy.Char8 as LBS
+import Data.Convertible.Base
+import Data.Convertible.Instances.Text ()
 import Data.Monoid.Unicode
 import Data.String
 import qualified Data.Text as T
 import Data.Monoid.Unicode
 import Data.String
 import qualified Data.Text as T
@@ -95,7 +97,7 @@ handleStaticDir sendContent basePath
          handleStaticFile sendContent path
     where
       dec8 ∷ ByteString → String
          handleStaticFile sendContent path
     where
       dec8 ∷ ByteString → String
-      dec8 = T.unpack ∘ T.decodeUtf8
+      dec8 = cs ∘ T.decodeUtf8
 
 securityCheck ∷ (Eq s, Show s, IsString s, Monad m) ⇒ [s] → m ()
 securityCheck pathElems
 
 securityCheck ∷ (Eq s, Show s, IsString s, Monad m) ⇒ [s] → m ()
 securityCheck pathElems
index 297ea3a762ef64992466469a3845053ffb86d7af..7537eafcffacf7d8edf755e2bb8fea30cd636547 100644 (file)
@@ -36,11 +36,12 @@ import Data.Char
 import Data.Collections
 import Data.Collections.BaseInstances ()
 import Data.Convertible.Base
 import Data.Collections
 import Data.Collections.BaseInstances ()
 import Data.Convertible.Base
+import Data.Convertible.Instances.Ascii ()
+import Data.Convertible.Instances.Text ()
 import Data.Convertible.Instances.Time ()
 import Data.Maybe
 import Data.Monoid.Unicode
 import Data.Text (Text)
 import Data.Convertible.Instances.Time ()
 import Data.Maybe
 import Data.Monoid.Unicode
 import Data.Text (Text)
-import qualified Data.Text as T
 import Data.Time
 import Network.URI
 import Prelude hiding (last, mapM, null, reverse)
 import Data.Time
 import Network.URI
 import Prelude hiding (last, mapM, null, reverse)
@@ -73,9 +74,9 @@ splitBy isSep src
 -- >>> quoteStr "ab\"c"
 -- "\"ab\\\"c\""
 quoteStr ∷ Ascii → AsciiBuilder
 -- >>> quoteStr "ab\"c"
 -- "\"ab\\\"c\""
 quoteStr ∷ Ascii → AsciiBuilder
-quoteStr str = A.toAsciiBuilder "\"" ⊕
-               go (A.toByteString str) (∅) ⊕
-               A.toAsciiBuilder "\""
+quoteStr str = cs ("\"" ∷ Ascii) ⊕
+               go (cs str) (∅)   ⊕
+               cs ("\"" ∷ Ascii)
     where
       go ∷ ByteString → AsciiBuilder → AsciiBuilder
       go bs ab
     where
       go ∷ ByteString → AsciiBuilder → AsciiBuilder
       go bs ab
@@ -85,10 +86,10 @@ quoteStr str = A.toAsciiBuilder "\"" ⊕
                       → ab ⊕ b2ab x
                   | otherwise
                       → go (BS.tail y)
                       → ab ⊕ b2ab x
                   | otherwise
                       → go (BS.tail y)
-                           (ab ⊕ b2ab x ⊕ A.toAsciiBuilder "\\\"")
+                           (ab ⊕ b2ab x ⊕ cs ("\\\"" ∷ Ascii))
 
       b2ab ∷ ByteString → AsciiBuilder
 
       b2ab ∷ ByteString → AsciiBuilder
-      b2ab = A.toAsciiBuilder ∘ A.unsafeFromByteString
+      b2ab = cs ∘ A.unsafeFromByteString
 
 -- |>>> parseWWWFormURLEncoded "aaa=bbb&ccc=ddd"
 -- [("aaa", "bbb"), ("ccc", "ddd")]
 
 -- |>>> parseWWWFormURLEncoded "aaa=bbb&ccc=ddd"
 -- [("aaa", "bbb"), ("ccc", "ddd")]
@@ -97,7 +98,7 @@ parseWWWFormURLEncoded src
     -- THINKME: We could gain some performance by using attoparsec
     -- here.
     | src ≡ ""  = []
     -- THINKME: We could gain some performance by using attoparsec
     -- here.
     | src ≡ ""  = []
-    | otherwise = do pairStr ← splitBy (\ c → c ≡ ';' ∨ c ≡ '&') (A.toString src)
+    | otherwise = do pairStr ← splitBy (\ c → c ≡ ';' ∨ c ≡ '&') (cs src)
                      let (key, value) = break (≡ '=') pairStr
                      return ( unescape key
                             , unescape $ case value of
                      let (key, value) = break (≡ '=') pairStr
                      return ( unescape key
                             , unescape $ case value of
@@ -116,7 +117,7 @@ parseWWWFormURLEncoded src
 -- "example.com"
 uriHost ∷ URI → Host
 {-# INLINE uriHost #-}
 -- "example.com"
 uriHost ∷ URI → Host
 {-# INLINE uriHost #-}
-uriHost = CI.mk ∘ T.pack ∘ uriRegName ∘ fromJust ∘ uriAuthority
+uriHost = CI.mk ∘ cs ∘ uriRegName ∘ fromJust ∘ uriAuthority
 
 -- |>>> uriPathSegments "http://example.com/foo/bar"
 -- ["foo", "bar"]
 
 -- |>>> uriPathSegments "http://example.com/foo/bar"
 -- ["foo", "bar"]