]> gitweb @ CieloNegro.org - Lucu.git/blobdiff - Network/HTTP/Lucu/Request.hs
Destroy Data.Attoparsec.Parsable; use Data.Default instead
[Lucu.git] / Network / HTTP / Lucu / Request.hs
index b6ffedbdb11ccf2ef0bfa2701998d0183e82c808..13ccf9c9420b8265fa244934ed2d98cebc1a497f 100644 (file)
@@ -1,6 +1,8 @@
 {-# LANGUAGE
 {-# LANGUAGE
-    MultiParamTypeClasses
+    FlexibleInstances
+  , MultiParamTypeClasses
   , OverloadedStrings
   , OverloadedStrings
+  , TypeSynonymInstances
   , UnicodeSyntax
   , ViewPatterns
   #-}
   , UnicodeSyntax
   , ViewPatterns
   #-}
@@ -17,9 +19,8 @@ import Control.Applicative
 import Control.Monad.Unicode
 import Data.Ascii (Ascii)
 import Data.Attoparsec.Char8
 import Control.Monad.Unicode
 import Data.Ascii (Ascii)
 import Data.Attoparsec.Char8
-import Data.Attoparsec.Parsable
-import Data.ByteString (ByteString)
 import qualified Data.ByteString.Char8 as C8
 import qualified Data.ByteString.Char8 as C8
+import Data.Default
 import Network.HTTP.Lucu.Headers
 import Network.HTTP.Lucu.HttpVersion
 import Network.HTTP.Lucu.Parser.Http
 import Network.HTTP.Lucu.Headers
 import Network.HTTP.Lucu.HttpVersion
 import Network.HTTP.Lucu.Parser.Http
@@ -63,17 +64,17 @@ reqHasBody (reqMethod → m)
     | m ≡ PUT   = True
     | otherwise = False
 
     | m ≡ PUT   = True
     | otherwise = False
 
-instance Parsable ByteString Request where
-    {-# INLINEABLE parser #-}
-    parser = do skipMany crlf
-                (meth, u, ver) ← requestLine
-                hdrs           ← parser
-                return Request {
-                             reqMethod  = meth
-                           , reqURI     = u
-                           , reqVersion = ver
-                           , reqHeaders = hdrs
-                           }
+instance Default (Parser Request) where
+    {-# INLINEABLE def #-}
+    def = do skipMany crlf
+             (meth, u, ver) ← requestLine
+             hdrs           ← def
+             return Request {
+                          reqMethod  = meth
+                        , reqURI     = u
+                        , reqVersion = ver
+                        , reqHeaders = hdrs
+                        }
 
 requestLine ∷ Parser (Method, URI, HttpVersion)
 {-# INLINEABLE requestLine #-}
 
 requestLine ∷ Parser (Method, URI, HttpVersion)
 {-# INLINEABLE requestLine #-}
@@ -81,7 +82,7 @@ requestLine = do meth ← method
                  sp
                  u ← uri
                  sp
                  sp
                  u ← uri
                  sp
-                 ver ← parser
+                 ver ← def
                  crlf
                  return (meth, u, ver)
 
                  crlf
                  return (meth, u, ver)