{-# LANGUAGE Trustworthy #-} {- | Frank is a Sinatra-inspired DSL (see ) for creating routes. It is composable with all 'Routeable' types, but is designed to be used with 'Network.Wai.Controller's. Each verb ('get', 'post', 'put', etc') takes a URL pattern of the form \"\/dir\/:paramname\/dir\" (see 'routePattern' for details) and a 'Routeable': @ module SimpleFrank (server) where import "Data.String" import "Data.Maybe" import "Control.Monad" import "LIO" import "Hails.HttpServer.Types" import "Hails.Web" import qualified "Hails.Web.Frank" as F server :: 'Application' server = 'mkRouter' $ do F.'get' \"\/users\" $ do req \<- 'request' '>>=' unlabel return $ 'okHtml' $ 'fromString' $ \"Welcome Home \" ++ (show $ 'serverName' req) F.'get' \"\/users\/:id\" $ do userId <- fromMaybe \"\" ``liftM`` 'queryParam' \"id\" return $ 'ok' \"text/json\" $ fromString $ \"{\\\"myid\\\": \" ++ (show userId) ++ \"}\" F.'put' \"\/user\/:id\" $ do ... @ With @hails@, you can directly run this: > hails --app=SimpleFrank And, with @curl@, you can now checkout your page: > $ curl localhost:8080/users > Welcome Home "localhost" > > $ curl localhost:8080/users/123 > {"myid": "123"} > > $ ... -} module Hails.Web.Frank ( get , post , put , delete , options ) where import Network.HTTP.Types import Hails.Web.Router import qualified Data.ByteString as S -- | Helper method frankMethod :: Routeable r => StdMethod -> S.ByteString -> r -> Route frankMethod method pattern = routeMethod method . routePattern pattern -- | Matches the GET method on the given URL pattern get :: Routeable r => S.ByteString -> r -> Route get = frankMethod GET -- | Matches the POST method on the given URL pattern post :: Routeable r => S.ByteString -> r -> Route post = frankMethod POST -- | Matches the PUT method on the given URL pattern put :: Routeable r => S.ByteString -> r -> Route put = frankMethod PUT -- | Matches the DELETE method on the given URL pattern delete :: Routeable r => S.ByteString -> r -> Route delete = frankMethod DELETE -- | Matches the OPTIONS method on the given URL pattern options :: Routeable r => S.ByteString -> r -> Route options = frankMethod OPTIONS