module Control.Monad.Apiary.Filter.Internal
( function, function', function_, focus
) where
import Network.Wai
import Control.Monad
import Control.Monad.Apiary.Internal
import Control.Monad.Apiary.Action
import Data.Apiary.SList
import Data.Apiary.Document
function :: Monad actM => (Doc -> Doc)
-> (SList prms -> Request -> Maybe (SList prms'))
-> ApiaryT exts prms' actM m () -> ApiaryT exts prms actM m ()
function d f = focus d $ \c -> getRequest >>= \r -> case f c r of
Nothing -> mzero
Just c' -> return c'
function' :: Monad actM => (Doc -> Doc) -> (Request -> Maybe prm)
-> ApiaryT exts (prm ': prms) actM m () -> ApiaryT exts prms actM m ()
function' d f = function d $ \c r -> (::: c) `fmap` f r
function_ :: Monad actM => (Doc -> Doc) -> (Request -> Bool)
-> ApiaryT exts prms actM m () -> ApiaryT exts prms actM m ()
function_ d f = function d $ \c r -> if f r then Just c else Nothing