Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Wai Routes provides typesafe URLs for Wai applications
Haskell
Failed to load latest commit information.
examples
src/Network/Wai/Middleware html response type should be compatible with blaze-html combinators
.gitignore
.travis.yml Added .travis.yml
LICENSE Changed license to MIT
README.md Bumped version after change in text dependency
Setup.hs Initial release
wai-routes.cabal Bumped version after change in text dependency

README.md

Wai Routes (wai-routes-0.5.1)

Build Status

This package provides typesafe URLs for Wai applications.

Features:

  • Automatic generation of Route boilerplate using TH
  • Easy Nested Routes
  • Sitewide Master datatype which is passed to all handlers and can be used for persistent data (like DB connections)
  • RouteM monad that makes it easy to compose an application with multiple routes and middleware.
  • HandlerM monad that makes it easy to build a Handler with access to Request data and Master datatype
  • Handlers can abort processing and pass control to the next application in the wai stack

It depends on yesod-routes package for the TH functionality (but not the rest of yesod). The aim is to provide a similar level of typesafe URL functionality to Wai applications as is available to Yesod applications.

Example Usage

The following builds a simple JSON service (using Aeson for JSON conversion)

{-# LANGUAGE OverloadedStrings, TypeFamilies #-}

import Network.Wai
import Network.Wai.Middleware.Routes

import Data.IORef

-- The Site Argument
data MyRoute = MyRoute (IORef DB)

-- Generate Routes
mkRoute MyRoute [parseRoutes|
/             UsersR         GET
/user/#Int    UserR:
  /              UserRootR   GET
  /delete        UserDeleteR POST
|]

-- Define Handlers
-- All Users Page
getUsersR :: Handler MyRoute
getUsersR (MyRoute dbref) request = ...
-- Single User Page
getUserRootR :: Int -> Handler MyRoute
getUserRootR userid = ...
-- Delete Single User
postUserDeleteR :: Int -> Handler MyRoute
postUserDeleteR userid = ...

-- Define Application using RouteM Monad
myApp = do
  db <- liftIO $ newIORef mydb
  route (MyRoute db)
  setDefaultAction $ staticApp $ defaultFileServerSettings "static"

-- Run the application
main :: IO ()
main = toWaiApp myApp >>= run 8080

Changelog

  • 0.1 : Intial release
  • 0.2 : Updated functionality based on yesod-routes package
  • 0.2.1 : Changed license to MIT
  • 0.2.2 : Fixed license information in hs and cabal files
  • 0.2.3 : Implemented a better showRoute function. Added blaze-builder as a dependency
  • 0.2.4 : Put an upper bound on yesod-routes version as 1.2 breaks API compatibility
  • 0.3.0 : yesod-routes 1.2 compatibility. Abstracted request data. Created runNext which skips to the next app in the wai stack
  • 0.3.1 : Removed internal 'App' synonym which only muddied the types. Added common content types for convenience.
  • 0.3.2 : Added HandlerM Monad which makes it easier to build Handlers
  • 0.3.3 : Better exports from the Network.Wai.Middleware.Routes module
  • 0.3.4 : Added 'liftResourceT' to lift a ResourceT into HandlerM
  • 0.4.0 : Wai 2 compatibility. Replaced 'liftResourceT' with 'lift'
  • 0.4.1 : showRoute now returns "/" instead of ""
  • 0.5.0 : Added raw,text,html,json helpers. Update to wai-2.1.
  • 0.5.1 : Bumped dependency upper bounds to allow text 1.*
Something went wrong with that request. Please try again.