]> gitweb @ CieloNegro.org - Lucu.git/blobdiff - Network/HTTP/Lucu/Utils.hs
Use base64-bytestring instead of dataenc
[Lucu.git] / Network / HTTP / Lucu / Utils.hs
index 9212747d9cf4ea782491240f1c8e201c29715dc4..c85c9a72b6a023241857ba1c613eb1e4d5a2485e 100644 (file)
@@ -1,3 +1,7 @@
+{-# LANGUAGE
+    BangPatterns
+  , UnicodeSyntax
+  #-}
 -- |Utility functions used internally in the Lucu httpd. These
 -- functions may be useful too for something else.
 module Network.HTTP.Lucu.Utils
@@ -10,9 +14,10 @@ module Network.HTTP.Lucu.Utils
     )
     where
 
-import Data.List hiding (last)
+import Control.Monad
+import Data.List     hiding (last)
 import Network.URI
-import Prelude hiding (last)
+import Prelude       hiding (last)
 
 -- |> splitBy (== ':') "ab:c:def"
 --  > ==> ["ab", "c", "def"]
@@ -25,14 +30,12 @@ splitBy isSep src
 -- |> joinWith ":" ["ab", "c", "def"]
 --  > ==> "ab:c:def"
 joinWith :: [a] -> [[a]] -> [a]
-joinWith separator xs
-    = separator `seq` xs `seq`
-      foldr (++) [] $! intersperse separator xs
+joinWith = (join .) . intersperse
 
 -- |> trim (== '_') "__ab_c__def___"
 --  > ==> "ab_c__def"
 trim :: (a -> Bool) -> [a] -> [a]
-trim p = p `seq` trimTail . trimHead
+trim !p = trimTail . trimHead
     where
       trimHead = dropWhile p
       trimTail = reverse . trimHead . reverse
@@ -53,8 +56,7 @@ isWhiteSpace _    = False
 --  > quoteStr "ab\"c"
 --  > ==> "\"ab\\\"c\""
 quoteStr :: String -> String
-quoteStr str = str `seq`
-               foldr (++) "" (["\""] ++ map quote str ++ ["\""])
+quoteStr !str = concat (["\""] ++ map quote str ++ ["\""])
     where
       quote :: Char -> String
       quote '"' = "\\\""