module Network.Wai.Router where
import Control.Monad
import Network.Wai
import Control.Applicative

type Router = Request -> IO (Maybe Response)

runRouter :: Application -> Router -> Application
runRouter d r req = do
    maybe <$> (d req) <*> pure id <*> r req

fromApplication :: Application -> Router
fromApplication app req = return <$> app req

route :: [Router] -> Router
route rs req = do
    msum <$> mapM ($req) rs

respond :: Response -> IO (Maybe Response)
respond = return . return

pass :: IO (Maybe Response)
pass = return Nothing