wai-predicates 0.1 → 0.2
raw patch · 6 files changed
+36/−12 lines, 6 filesdep +transformers
Dependencies added: transformers
Files
- src/Data/Predicate.hs +1/−1
- src/Data/Predicate/Result.hs +24/−1
- src/Network/Wai/Predicate.hs +3/−3
- src/Network/Wai/Predicate/Error.hs +1/−1
- src/Network/Wai/Predicate/Request.hs +5/−5
- wai-predicates.cabal +2/−1
src/Data/Predicate.hs view
@@ -6,6 +6,7 @@ module Data.Predicate ( Predicate+ , module Data.Predicate.Result , constant , failure , true@@ -23,7 +24,6 @@ , mapFail , exec , module Data.Predicate.Product- , module Data.Predicate.Result ) where import Control.Monad
src/Data/Predicate/Result.hs view
@@ -8,6 +8,8 @@ import Control.Applicative import Control.Monad+import Control.Monad.Trans.Class+import Control.Monad.IO.Class -- | A 'Bool'-like type where each branch--@Fail@ and @Okay@--carries -- some metadata.@@ -33,6 +35,12 @@ result f _ (Fail x) = f x result _ g (Okay d x) = g d x +fromEither :: Either f t -> Result f t+fromEither = either Fail return++toEither :: Result f t -> Either f t+toEither = result Left (\_ x -> Right x)+ newtype ResultT f m t = ResultT { runResultT :: m (Result f t) } instance Monad m => Functor (ResultT f m) where@@ -43,20 +51,35 @@ (<*>) = ap instance Monad m => Monad (ResultT f m) where- return = ResultT . return . Okay 0+ return = ResultT . return . return m >>= k = ResultT $ runResultT m >>= \a -> case a of Okay _ x -> runResultT (k x) Fail x -> return (Fail x) fail = ResultT . fail +instance MonadTrans (ResultT f) where+ lift = ResultT . liftM return++instance MonadIO m => MonadIO (ResultT f m) where+ liftIO = lift . liftIO+ resultT :: Monad m => (f -> m a) -> (Double -> t -> m a) -> ResultT f m t -> m a resultT f g (ResultT m) = m >>= \a -> case a of Fail x -> f x Okay d x -> g d x +resultT' :: Monad m => (f -> m a) -> (t -> m a) -> ResultT f m t -> m a+resultT' f g = resultT f (\_ x -> g x)+ mapResultT :: (m (Result f t) -> n (Result f' t')) -> ResultT f m t -> ResultT f' n t' mapResultT f m = ResultT $ f (runResultT m) hoistResult :: Monad m => Result f t -> ResultT f m t hoistResult = ResultT . return++okay :: Monad m => Double -> t -> ResultT f m t+okay d = hoistResult . Okay d++throwF :: Monad m => f -> ResultT f m t+throwF = hoistResult . Fail
src/Network/Wai/Predicate.hs view
@@ -6,7 +6,7 @@ module Network.Wai.Predicate ( module Data.Predicate- , getRequest+ , request , query , hasQuery@@ -43,8 +43,8 @@ import Network.Wai.Predicate.Utility import Network.Wai -getRequest :: (HasRequest r) => Predicate r f Request-getRequest = return . request+request :: (HasRequest r) => Predicate r f Request+request = return . getRequest query :: (HasQuery r, FromByteString a) => ByteString -> Predicate r Error a query k r = case lookupQuery k r of
src/Network/Wai/Predicate/Error.hs view
@@ -7,7 +7,7 @@ import Data.ByteString (ByteString) import Network.HTTP.Types.Status --- | The error type used as meta-data for @F@ in all WAI predicates.+-- | The error type used as meta-data for @Fail@ in all WAI predicates. data Error = Error { status :: !Status -- ^ HTTP status code , message :: Maybe ByteString -- ^ optional status message
src/Network/Wai/Predicate/Request.hs view
@@ -34,7 +34,7 @@ import qualified Data.Vector as Vec class HasRequest a where- request :: a -> Wai.Request+ getRequest :: a -> Wai.Request class HasMethod a where method :: a -> Method@@ -58,22 +58,22 @@ } instance HasRequest Req where- request = _request+ getRequest = _request instance HasMethod Req where- method = Wai.requestMethod . request+ method = Wai.requestMethod . getRequest instance HasMethod Wai.Request where method = Wai.requestMethod instance HasHeaders Req where- headers = Wai.requestHeaders . request+ headers = Wai.requestHeaders . getRequest instance HasHeaders Wai.Request where headers = Wai.requestHeaders instance HasQuery Req where- queryItems = Wai.queryString . request+ queryItems = Wai.queryString . getRequest instance HasQuery Wai.Request where queryItems = Wai.queryString
wai-predicates.cabal view
@@ -1,5 +1,5 @@ name: wai-predicates-version: 0.1+version: 0.2 synopsis: WAI request predicates license: OtherLicense license-file: LICENSE@@ -53,6 +53,7 @@ , cookie == 0.4.* , case-insensitive == 1.1.* , http-types == 0.8.*+ , transformers == 0.3.* , vector == 0.10.* , wai == 2.0.*