]> gitweb @ CieloNegro.org - Lucu.git/blobdiff - Network/HTTP/Lucu/MIMEParams.hs
Automatic deriving of Unfoldable
[Lucu.git] / Network / HTTP / Lucu / MIMEParams.hs
index f4b503ee6ddd176d3febb9e61aa0691967844070..1304c2328a5db1fd3931e332b07948928dc32bdb 100644 (file)
@@ -10,6 +10,9 @@
   , TypeSynonymInstances
   , UnicodeSyntax
   #-}
+{-# OPTIONS_GHC -ddump-splices #-} -- FIXME
+-- GHC 7.0.3 gives us a false warning.
+{-# OPTIONS_GHC -fno-warn-missing-methods #-}
 -- |Parsing and printing MIME parameter values
 -- (<http://tools.ietf.org/html/rfc2231>).
 module Network.HTTP.Lucu.MIMEParams
@@ -30,6 +33,7 @@ import qualified Data.ByteString.Char8 as BS
 import Data.Char
 import Data.Collections
 import Data.Collections.BaseInstances ()
+import qualified Data.Collections.Newtype.TH as C
 import qualified Data.Map as M (Map)
 import Data.Monoid
 import Data.Monoid.Unicode
@@ -40,7 +44,6 @@ import Data.Text.Encoding
 import Data.Text.Encoding.Error
 import Data.Typeable
 import Data.Word
-import Language.Haskell.TH.Syntax
 import Network.HTTP.Lucu.OrphanInstances ()
 import Network.HTTP.Lucu.Parser.Http
 import Network.HTTP.Lucu.Utils
@@ -54,26 +57,10 @@ newtype MIMEParams
     = MIMEParams (M.Map CIAscii Text)
     deriving (Eq, Show, Read, Monoid, Typeable)
 
-instance Lift MIMEParams where
-    lift (MIMEParams m) = [| MIMEParams $(lift m) |]
-
-instance Unfoldable MIMEParams (CIAscii, Text) where
-    {-# INLINE insert #-}
-    insert p (MIMEParams m)
-        = MIMEParams $ insert p m
-    {-# INLINE empty #-}
-    empty
-        = MIMEParams empty
-    {-# INLINE singleton #-}
-    singleton p
-        = MIMEParams $ singleton p
-    {-# INLINE insertMany #-}
-    insertMany f (MIMEParams m)
-        = MIMEParams $ insertMany f m
-    {-# INLINE insertManySorted #-}
-    insertManySorted f (MIMEParams m)
-        = MIMEParams $ insertManySorted f m
+C.derive [d| instance Unfoldable MIMEParams (CIAscii, Text)
+           |]
 
+-- FIXME: auto-derive
 instance Foldable MIMEParams (CIAscii, Text) where
     {-# INLINE null #-}
     null (MIMEParams m) = null m
@@ -82,10 +69,12 @@ instance Foldable MIMEParams (CIAscii, Text) where
     {-# INLINE foldr #-}
     foldr f b (MIMEParams m) = foldr f b m
 
+-- FIXME: auto-derive
 instance Collection MIMEParams (CIAscii, Text) where
     {-# INLINE filter #-}
     filter f (MIMEParams m) = MIMEParams $ filter f m
 
+-- FIXME: auto-derive
 instance Indexed MIMEParams CIAscii Text where
     {-# INLINE index #-}
     index k (MIMEParams m) = index k m
@@ -94,6 +83,7 @@ instance Indexed MIMEParams CIAscii Text where
     {-# INLINE inDomain #-}
     inDomain k (MIMEParams m) = inDomain k m
 
+-- FIXME: auto-derive
 instance Map MIMEParams CIAscii Text where
     {-# INLINE lookup #-}
     lookup k (MIMEParams m) = lookup k m
@@ -116,6 +106,7 @@ instance Map MIMEParams CIAscii Text where
     isProperSubmapBy f (MIMEParams α) (MIMEParams β)
         = isProperSubmapBy f α β
 
+-- FIXME: auto-derive
 instance SortingCollection MIMEParams (CIAscii, Text) where
     {-# INLINE minView #-}
     minView (MIMEParams m) = second MIMEParams <$> minView m