Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
- type Application = Request -> IO Response
- class Server a where
- application :: a -> Application
- slashRedirect :: (Target a, HasUrl r, HasPath r) => Prism' Match Match -> (a -> Response) -> r -> Maybe Response
Server
type Application = Request -> IO Response Source
Ultimately any valid Nero server application must be transformed
. This type class facilitates the
creation of web server handling Request
-> IO
Response
Nero
applications.
application :: a -> Application Source
Trailing slash redirection
:: (Target a, HasUrl r, HasPath r) | |
=> Prism' Match Match | |
-> (a -> Response) | What to respond upon matching. |
-> r | |
-> Maybe Response |
Redirect with slash appended URL if only a trailing slash is needed for successful matching, otherwise it responds normally.
>>>
let mkRequest p = dummyRequest & host .~ "example.com" & path .~ p
>>>
let respond name = ok $ "<h1>Hello " <> name <> "</h1>"
>>>
let app = slashRedirect (prefixed "/hello/" . suffixed "/") respond :: Request -> Maybe Response
>>>
app (mkRequest "/hello/there") <&> status
Just "301 Moved Permanently">>>
app (mkRequest "/hello/there") >>= preview location <&> render
Just "http://example.com/hello/there/"
>>>
app (mkRequest "/hello/there/") <&> status
Just "200 OK">>>
app (mkRequest "/hello/there/") <&> body
Just "<h1>Hello there</h1>"
>>>
app $ mkRequest "/bye/"
Nothing