#CONFIGURE_ARGS = -O
CONFIGURE_ARGS = -O -fssl
-#CONFIGURE_ARGS = -O -fssl --enable-executable-profiling
include cabal-package.mk
import Data.Monoid
import Data.Monoid.Unicode
import Network.HTTP.Lucu.Parser.Http
-import Prelude hiding (filter, foldr, lookup, null)
+import Prelude hiding (filter, foldl, foldl1, foldr, foldr1, lookup, null)
import Prelude.Unicode
newtype Headers
insert (key, val) (Headers m)
= Headers $ insertWith merge key val m
{-# INLINE empty #-}
- empty
- = Headers empty
+ empty = Headers empty
{-# INLINE singleton #-}
- singleton p
- = Headers $ singleton p
- {-# INLINE insertMany #-}
- insertMany f (Headers m)
- = Headers $ insertMany f m
- {-# INLINE insertManySorted #-}
- insertManySorted f (Headers m)
- = Headers $ insertManySorted f m
+ singleton = Headers ∘ singleton
+-- FIXME: auto-derive
instance Foldable Headers (CIAscii, Ascii) where
+ {-# INLINE fold #-}
+ fold (Headers m) = fold m
+ {-# INLINE foldMap #-}
+ foldMap f (Headers m) = foldMap f m
+ {-# INLINE foldr #-}
+ foldr f b (Headers m) = foldr f b m
+ {-# INLINE foldl #-}
+ foldl f b (Headers m) = foldl f b m
+ {-# INLINE foldr1 #-}
+ foldr1 f (Headers m) = foldr1 f m
+ {-# INLINE foldl1 #-}
+ foldl1 f (Headers m) = foldl1 f m
{-# INLINE null #-}
null (Headers m) = null m
{-# INLINE size #-}
size (Headers m) = size m
- {-# INLINE foldr #-}
- foldr f b (Headers m) = foldr f b m
+ {-# INLINE isSingleton #-}
+ isSingleton (Headers m) = isSingleton m
+-- FIXME: auto-derive
instance Collection Headers (CIAscii, Ascii) where
{-# INLINE filter #-}
filter f (Headers m) = Headers $ filter f m
+-- FIXME: auto-derive
instance Indexed Headers CIAscii Ascii where
{-# INLINE index #-}
index k (Headers m) = index k m
adjust f k (Headers m) = Headers $ adjust f k m
{-# INLINE inDomain #-}
inDomain k (Headers m) = inDomain k m
+ {-# INLINE (//) #-}
+ Headers m // l = Headers $ m // l
+ {-# INLINE accum #-}
+ accum f (Headers m) l = Headers $ accum f m l
instance Monoid Headers where
{-# INLINE mempty #-}
- mempty = empty
+ mempty = empty
{-# INLINE mappend #-}
- mappend (Headers α) (Headers β)
- = Headers $ insertManySorted β α
+ mappend = insertMany
--- FIXME: override every methods
+-- FIXME: auto-derive
instance Map Headers CIAscii Ascii where
+ {-# INLINE delete #-}
+ delete k (Headers m) = Headers $ delete k m
+ {-# INLINE member #-}
+ member k (Headers m) = member k m
+ {-# INLINE union #-}
+ union (Headers α) (Headers β)
+ = Headers $ union α β
+ {-# INLINE intersection #-}
+ intersection (Headers α) (Headers β)
+ = Headers $ intersection α β
+ {-# INLINE difference #-}
+ difference (Headers α) (Headers β)
+ = Headers $ difference α β
+ {-# INLINE isSubset #-}
+ isSubset (Headers α) (Headers β)
+ = isSubset α β
+ {-# INLINE isProperSubset #-}
+ isProperSubset (Headers α) (Headers β)
+ = isProperSubset α β
{-# INLINE lookup #-}
lookup k (Headers m) = lookup k m
+ {-# INLINE alter #-}
+ alter f k (Headers m)
+ = Headers $ alter f k m
{-# INLINE insertWith #-}
insertWith f k v (Headers m)
= Headers $ insertWith f k v m
+ {-# INLINE fromFoldableWith #-}
+ fromFoldableWith = (Headers ∘) ∘ fromFoldableWith
+ {-# INLINE foldGroups #-}
+ foldGroups = ((Headers ∘) ∘) ∘ foldGroups
{-# INLINE mapWithKey #-}
mapWithKey f (Headers m)
= Headers $ mapWithKey f m
isProperSubmapBy f (Headers α) (Headers β)
= isProperSubmapBy f α β
+-- FIXME: auto-derive
instance SortingCollection Headers (CIAscii, Ascii) where
{-# INLINE minView #-}
minView (Headers m) = second Headers <$> minView m
, qualifyAll "Data.Ascii" "A"
, qualifyAll "Data.ByteString.Char8" "B"
, qualifyAll "Data.ByteString.Lazy.Internal" "L"
- , qualifyAll "Data.Map" "M"
+ , qualifyAll "Data.CaseInsensitive" "CI"
+ , qualifyAll "Data.Collections" "C"
, qualifyAll "Data.Text" "T"
, unqualifyAll "Network.HTTP.Lucu.ETag" "Network.HTTP.Lucu"
, unqualifyAll "Network.HTTP.Lucu.Resource" "Network.HTTP.Lucu"
, rrImps ∷ !Imports
}
+-- |@'insert' imp@ merges @imp@ with an existing one if any.
instance Unfoldable Imports ImportOp where
insert qi@(QualifiedImp {}) (Imports s) = Imports $ insert qi s
insert ui@(UnqualifiedImp {}) (Imports s)
(_ , Nothing ) → ui'
(Just ns, Just ns') → ui { impNames = Just (ns ⊕ ns') }
+ empty = Imports empty
+ singleton = Imports ∘ singleton
+
+-- FIXME: auto-derive
instance Foldable Imports ImportOp where
foldr f b (Imports s) = foldr f b s
+-- FIXME: auto-derive
instance Collection Imports ImportOp where
filter f (Imports s) = Imports $ filter f s
instance Monoid Imports where
- mempty = empty
- mappend (Imports α) (Imports β)
- = Imports $ insertManySorted β α
+ mempty = empty
+ mappend = insertMany
+-- FIXME: auto-derive
instance Map Imports ImportOp () where
lookup k (Imports s) = lookup k s
mapWithKey f (Imports m)
isProperSubmapBy f (Imports α) (Imports β)
= isProperSubmapBy f α β
+-- FIXME: auto-derive
instance Set Imports ImportOp where
haddock_candy = haddock_candy
+-- FIXME: auto-derive
instance SortingCollection Imports ImportOp where
minView (Imports s) = second Imports <$> minView s
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
= MIMEParams (M.Map CIAscii Text)
deriving (Eq, Show, Read, Monoid, Typeable)
-instance Lift MIMEParams where
- lift (MIMEParams m) = [| MIMEParams $(lift m) |]
-
+-- FIXME: auto-derive
instance Unfoldable MIMEParams (CIAscii, Text) where
{-# INLINE insert #-}
insert p (MIMEParams m)
insertManySorted f (MIMEParams m)
= MIMEParams $ insertManySorted f m
+-- FIXME: auto-derive
instance Foldable MIMEParams (CIAscii, Text) where
{-# INLINE null #-}
null (MIMEParams m) = null m
{-# 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
{-# 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
isProperSubmapBy f (MIMEParams α) (MIMEParams β)
= isProperSubmapBy f α β
+-- FIXME: auto-derive
instance SortingCollection MIMEParams (CIAscii, Text) where
{-# INLINE minView #-}
minView (MIMEParams m) = second MIMEParams <$> minView m
{-# LANGUAGE
- RecordWildCards
+ FlexibleContexts
+ , FlexibleInstances
+ , OverlappingInstances
+ , RecordWildCards
, TemplateHaskell
+ , UndecidableInstances
, UnicodeSyntax
#-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
import qualified Data.ByteString.Lazy.Internal as Lazy
import Data.CaseInsensitive (CI, FoldCase)
import qualified Data.CaseInsensitive as CI
-import Data.Map (Map)
-import qualified Data.Map as M
+import Data.Collections
+import Data.Collections.BaseInstances ()
import Data.Ratio
import Data.Text (Text)
import qualified Data.Text as T
instance Lift Text where
lift t = [| T.pack $(litE $ stringL $ T.unpack t) |]
-instance (Lift k, Lift v) ⇒ Lift (Map k v) where
- lift m
- | M.null m = [| M.empty |]
- | otherwise = [| M.fromDistinctAscList $(liftPairs (M.toAscList m)) |]
+instance (Lift k, Lift v, Collection c (k, v)) ⇒ Lift c where
+ lift c
+ | null c = [| empty |]
+ | otherwise = [| fromList $(liftPairs (fromFoldable c)) |]
where
liftPairs = listE ∘ map liftPair
liftPair (k, v) = tupE [lift k, lift v]