packages feed

wai-middleware-verbs 0.3.0 → 0.3.1

raw patch · 2 files changed

+19/−11 lines, 2 files

Files

src/Network/Wai/Middleware/Verbs.hs view
@@ -61,10 +61,8 @@ import qualified Data.HashMap.Lazy                    as HM import           Data.Monoid import           Data.Hashable-import           Control.Arrow (second) import           Control.Applicative import           Control.Monad.Trans-import           Control.Monad.Trans.Maybe import           Control.Monad.State hiding (get, put) import qualified Control.Monad.State                  as S import           Control.Monad.Reader@@ -83,8 +81,14 @@ -- * Types  -- | A map from an HTTP verb, to a result and uploading method.-type VerbMap r = HashMap Verb r+newtype VerbMap r = VerbMap+  { getVerbMap :: HashMap Verb r+  } deriving (Functor) +instance Monoid r => Monoid (VerbMap r) where+  mempty = VerbMap mempty+  mappend (VerbMap x) (VerbMap y) = VerbMap $ HM.unionWith (<>) x y+ type Verb = StdMethod  deriving instance Generic Verb@@ -107,7 +111,7 @@  -- | Take the monadic partial result of @lookupVerb@, and actually h the upload. lookupVerb :: Verb -> VerbMap r -> Maybe r-lookupVerb = HM.lookup+lookupVerb v = HM.lookup v . getVerbMap  {-# INLINEABLE lookupVerb #-} @@ -135,7 +139,7 @@  deriving instance (MonadResource m, MonadBase IO m) => MonadResource (VerbListenerT r m) -execVerbListenerT :: Monad m => VerbListenerT r m a -> m (VerbMap r)+execVerbListenerT :: (Monad m, Monoid r) => VerbListenerT r m a -> m (VerbMap r) execVerbListenerT xs = execStateT (runVerbListenerT xs) mempty  {-# INLINEABLE execVerbListenerT #-}@@ -149,29 +153,33 @@  -- | For simple @GET@ responses get :: ( Monad m+       , Monoid r        ) => r -> VerbListenerT r m ()-get r = tell' $! HM.singleton GET r+get r = tell' . VerbMap $ HM.singleton GET r  {-# INLINEABLE get #-}  -- | For simple @POST@ responses post :: ( Monad m+        , Monoid r         ) => r -> VerbListenerT r m ()-post r = tell' $! HM.singleton POST r+post r = tell' . VerbMap $ HM.singleton POST r  {-# INLINEABLE post #-}  -- | For simple @PUT@ responses put :: ( Monad m+       , Monoid r        ) => r -> VerbListenerT r m ()-put r = tell' $! HM.singleton PUT r+put r = tell' . VerbMap $ HM.singleton PUT r  {-# INLINEABLE put #-}  -- | For simple @DELETE@ responses delete :: ( Monad m+          , Monoid r           ) => r -> VerbListenerT r m ()-delete r = tell' $! HM.singleton DELETE r+delete r = tell' . VerbMap $ HM.singleton DELETE r  {-# INLINEABLE delete #-} @@ -180,7 +188,7 @@  {-# INLINEABLE tell' #-} -mapVerbs :: Monad m => (r -> s) ->  VerbListenerT r m () -> VerbListenerT s m ()+mapVerbs :: (Monad m, Monoid r, Monoid s) => (r -> s) ->  VerbListenerT r m () -> VerbListenerT s m () mapVerbs f xs = do   vmap <- lift $ execVerbListenerT xs   tell' $ f <$> vmap
wai-middleware-verbs.cabal view
@@ -1,5 +1,5 @@ Name:                   wai-middleware-verbs-Version:                0.3.0+Version:                0.3.1 Author:                 Athan Clark <athan.clark@gmail.com> Maintainer:             Athan Clark <athan.clark@gmail.com> License:                BSD3