yesod-core-1.6.26.0: Creation of type-safe, RESTful web applications.

Safe Haskell | None
Language | Haskell2010

Yesod.Core.Dispatch

Contents

- Quasi-quoted routing
  - More fine-grained
    - Route generation options
    - Helpers
  - Path pieces
- Convert to WAI
- WAI subsites

Synopsis

- parseRoutes :: QuasiQuoter
- parseRoutesNoCheck :: QuasiQuoter
- parseRoutesFile :: FilePath -> Q Exp
- parseRoutesFileNoCheck :: FilePath -> Q Exp
- mkYesod :: String -> [ResourceTree String] -> Q [Dec]
- mkYesodOpts :: RouteOpts -> String -> [ResourceTree String] -> Q [Dec]
- mkYesodWith :: [[String]] -> String -> [String] -> [ResourceTree String] -> Q [Dec]
- mkYesodData :: String -> [ResourceTree String] -> Q [Dec]
- mkYesodDataOpts :: RouteOpts -> String -> [ResourceTree String] -> Q [Dec]
- mkYesodSubData :: String -> [ResourceTree String] -> Q [Dec]
- mkYesodSubDataOpts :: RouteOpts -> String -> [ResourceTree String] -> Q [Dec]
- mkYesodDispatch :: String -> [ResourceTree String] -> Q [Dec]
- mkYesodDispatchOpts :: RouteOpts -> String -> [ResourceTree String] -> Q [Dec]
- mkYesodSubDispatch :: [ResourceTree a] -> Q Exp
- data RouteOpts
- defaultOpts :: RouteOpts
- setEqDerived :: Bool -> RouteOpts -> RouteOpts
- setShowDerived :: Bool -> RouteOpts -> RouteOpts
- setReadDerived :: Bool -> RouteOpts -> RouteOpts
- defaultGen :: IO Int
- getGetMaxExpires :: IO (IO Text)
- class PathPiece s where
  - fromPathPiece :: Text -> Maybe s
  - toPathPiece :: s -> Text
- class PathMultiPiece s where
  - fromPathMultiPiece :: [Text] -> Maybe s
  - toPathMultiPiece :: s -> [Text]
- type Texts = [Text]
- toWaiApp :: YesodDispatch site => site -> IO Application
- toWaiAppPlain :: YesodDispatch site => site -> IO Application
- toWaiAppYre :: YesodDispatch site => YesodRunnerEnv site -> Application
- warp :: YesodDispatch site => Int -> site -> IO ()
- warpDebug :: YesodDispatch site => Int -> site -> IO ()
- warpEnv :: YesodDispatch site => site -> IO ()
- mkDefaultMiddlewares :: Logger -> IO Middleware
- defaultMiddlewaresNoLogging :: Middleware
- newtype WaiSubsite = WaiSubsite {
  - runWaiSubsite :: Application
  }
- newtype WaiSubsiteWithAuth = WaiSubsiteWithAuth {
  - runWaiSubsiteWithAuth :: Application
  }

# Quasi-quoted routing

parseRoutes :: QuasiQuoter #

A quasi-quoter to parse a string into a list of `Resource`s. Checks for overlapping routes, failing if present; use `parseRoutesNoCheck` to skip the checking. See documentation site for details on syntax.

parseRoutesNoCheck :: QuasiQuoter #

Same as `parseRoutes`, but performs no overlap checking.

parseRoutesFile :: FilePath -> Q Exp #

Same as `parseRoutes`, but uses an external file instead of quasiquotation.

The recommended file extension is `.yesodroutes`.

parseRoutesFileNoCheck :: FilePath -> Q Exp #

Same as `parseRoutesNoCheck`, but uses an external file instead of quasiquotation.

The recommended file extension is `.yesodroutes`.

mkYesod #

Arguments

:: String | name of the argument datatype
-> [ResourceTree String] |
-> Q [Dec] |

Generates URL datatype and site function for the given `Resource`s. This is used for creating sites, not subsites. See `mkYesodSubData` and `mkYesodSubDispatch` for the latter. Use `parseRoutes` to create the `Resource`s.

Contexts and type variables in the name of the datatype are parsed. For example, a datatype `App a` with typeclass constraint `MyClass a` can be written as `"(MyClass a) => App a"`.

mkYesodOpts :: RouteOpts -> String -> [ResourceTree String] -> Q [Dec] #

`mkYesod` but with custom options.

Since: 1.6.25.0

mkYesodWith #

Arguments

:: [[String]] | list of contexts
-> String | name of the argument datatype
-> [String] | list of type variables
-> [ResourceTree String] |
-> Q [Dec] |

Deprecated: Contexts and type variables are now parsed from the name in `mkYesod`. https://github.com/yesodweb/yesod/pull/1366

Similar to `mkYesod`, except contexts and type variables are not parsed. Instead, they are explicitly provided. You can write `(MyClass a) => App a` with `mkYesodWith [["MyClass","a"]] "App" ["a"] ...`.

## More fine-grained

mkYesodData :: String -> [ResourceTree String] -> Q [Dec] #

Sometimes, you will want to declare your routes in one file and define your handlers elsewhere. For example, this is the only way to break up a monolithic file into smaller parts. Use this function, paired with `mkYesodDispatch`, to do just that.

mkYesodDataOpts :: RouteOpts -> String -> [ResourceTree String] -> Q [Dec] #

`mkYesodData` but with custom options.

Since: 1.6.25.0

mkYesodSubData :: String -> [ResourceTree String] -> Q [Dec] #

mkYesodSubDataOpts :: RouteOpts -> String -> [ResourceTree String] -> Q [Dec] #

Since: 1.6.25.0

mkYesodDispatch :: String -> [ResourceTree String] -> Q [Dec] #

See `mkYesodData`.

mkYesodDispatchOpts :: RouteOpts -> String -> [ResourceTree String] -> Q [Dec] #

See `mkYesodDataOpts`

Since: 1.6.25.0

mkYesodSubDispatch :: [ResourceTree a] -> Q Exp #

### Route generation options

data RouteOpts #

General opts data type for generating yesod.

Contains options for what instances are derived for the route. Use the setting functions on `defaultOpts` to set specific fields.

Since: 1.6.25.0

defaultOpts :: RouteOpts #

Default options for generating routes.

Defaults to all instances derived.

Since: 1.6.25.0

setEqDerived :: Bool -> RouteOpts -> RouteOpts #

Since: 1.6.25.0

setShowDerived :: Bool -> RouteOpts -> RouteOpts #

Since: 1.6.25.0

setReadDerived :: Bool -> RouteOpts -> RouteOpts #

Since: 1.6.25.0

### Helpers

defaultGen :: IO Int #

Generate a random number uniformly distributed in the full range of `Int`.

Note: Before 1.6.20, this generates pseudo-random number in an unspecified range. The range size may not be a power of 2. Since 1.6.20, this uses a secure entropy source and generates in the full range of `Int`.

Since: 1.6.21.0

getGetMaxExpires :: IO (IO Text) #

Default constructor for `yreGetMaxExpires` field. Low level function for simple manual construction of `YesodRunnerEnv`.

Since: 1.4.29

## Path pieces

class PathPiece s where #

Methods

fromPathPiece :: Text -> Maybe s #

toPathPiece :: s -> Text #

#### Instances

Instances details

PathPiece Int16 |
Instance details Defined in Web.PathPieces Methods fromPathPiece :: Text -> Maybe Int16 # toPathPiece :: Int16 -> Text #
PathPiece Int32 |
Instance details Defined in Web.PathPieces Methods fromPathPiece :: Text -> Maybe Int32 # toPathPiece :: Int32 -> Text #
PathPiece Int64 |
Instance details Defined in Web.PathPieces Methods fromPathPiece :: Text -> Maybe Int64 # toPathPiece :: Int64 -> Text #
PathPiece Int8 |
Instance details Defined in Web.PathPieces Methods fromPathPiece :: Text -> Maybe Int8 # toPathPiece :: Int8 -> Text #
PathPiece Word16 |
Instance details Defined in Web.PathPieces Methods fromPathPiece :: Text -> Maybe Word16 # toPathPiece :: Word16 -> Text #
PathPiece Word32 |
Instance details Defined in Web.PathPieces Methods fromPathPiece :: Text -> Maybe Word32 # toPathPiece :: Word32 -> Text #
PathPiece Word64 |
Instance details Defined in Web.PathPieces Methods fromPathPiece :: Text -> Maybe Word64 # toPathPiece :: Word64 -> Text #
PathPiece Word8 |
Instance details Defined in Web.PathPieces Methods fromPathPiece :: Text -> Maybe Word8 # toPathPiece :: Word8 -> Text #
PathPiece Text |
Instance details Defined in Web.PathPieces Methods fromPathPiece :: Text -> Maybe Text # toPathPiece :: Text -> Text #
PathPiece Text |
Instance details Defined in Web.PathPieces Methods fromPathPiece :: Text -> Maybe Text # toPathPiece :: Text -> Text #
PathPiece Day |
Instance details Defined in Web.PathPieces Methods fromPathPiece :: Text -> Maybe Day # toPathPiece :: Day -> Text #
PathPiece Integer |
Instance details Defined in Web.PathPieces Methods fromPathPiece :: Text -> Maybe Integer # toPathPiece :: Integer -> Text #
PathPiece String |
Instance details Defined in Web.PathPieces Methods fromPathPiece :: Text -> Maybe String # toPathPiece :: String -> Text #
PathPiece () |
Instance details Defined in Web.PathPieces Methods fromPathPiece :: Text -> Maybe () # toPathPiece :: () -> Text #
PathPiece Bool |
Instance details Defined in Web.PathPieces Methods fromPathPiece :: Text -> Maybe Bool # toPathPiece :: Bool -> Text #
PathPiece Int |
Instance details Defined in Web.PathPieces Methods fromPathPiece :: Text -> Maybe Int # toPathPiece :: Int -> Text #
PathPiece Word |
Instance details Defined in Web.PathPieces Methods fromPathPiece :: Text -> Maybe Word # toPathPiece :: Word -> Text #
PathPiece a => PathPiece (Maybe a) |
Instance details Defined in Web.PathPieces Methods fromPathPiece :: Text -> Maybe (Maybe a) # toPathPiece :: Maybe a -> Text #

class PathMultiPiece s where #

Methods

fromPathMultiPiece :: [Text] -> Maybe s #

toPathMultiPiece :: s -> [Text] #

#### Instances

Instances details

PathPiece a => PathMultiPiece [a] |
Instance details Defined in Web.PathPieces Methods fromPathMultiPiece :: [Text] -> Maybe [a] # toPathMultiPiece :: [a] -> [Text] #

type Texts = [Text] #

# Convert to WAI

toWaiApp :: YesodDispatch site => site -> IO Application #

Same as `toWaiAppPlain`, but provides a default set of middlewares. This set may change with future releases, but currently covers:

- Logging
- GZIP compression
- Automatic HEAD method handling
- Request method override with the _method query string parameter
- Accept header override with the _accept query string parameter

toWaiAppPlain :: YesodDispatch site => site -> IO Application #

Convert the given argument into a WAI application, executable with any WAI handler. This function will provide no middlewares; if you want commonly used middlewares, please use `toWaiApp`.

toWaiAppYre :: YesodDispatch site => YesodRunnerEnv site -> Application #

Pure low level function to construct WAI application. Usefull when you need not standard way to run your app, or want to embed it inside another app.

Since: 1.4.29

warp :: YesodDispatch site => Int -> site -> IO () #

A convenience method to run an application using the Warp webserver on the specified port. Automatically calls `toWaiApp`. Provides a default set of middlewares. This set may change at any point without a breaking version number. Currently, it includes:

- Logging
- GZIP compression
- Automatic HEAD method handling
- Request method override with the _method query string parameter
- Accept header override with the _accept query string parameter

If you need more fine-grained control of middlewares, please use `toWaiApp` directly.

Since 1.2.0

warpDebug :: YesodDispatch site => Int -> site -> IO () #

Deprecated: Please use warp instead

Deprecated synonym for `warp`.

warpEnv :: YesodDispatch site => site -> IO () #

Runs your application using default middlewares (i.e., via `toWaiApp`). It reads port information from the PORT environment variable, as used by tools such as Keter and the FP Complete School of Haskell.

Note that the exact behavior of this function may be modified slightly over time to work correctly with external tools, without a change to the type signature.

mkDefaultMiddlewares :: Logger -> IO Middleware #

A default set of middlewares.

Since 1.2.0

defaultMiddlewaresNoLogging :: Middleware #

All of the default middlewares, excluding logging.

Since 1.2.12

# WAI subsites

newtype WaiSubsite #

Wrap up a normal WAI application as a Yesod subsite. Ignore parent site's middleware and isAuthorized.

Constructors

WaiSubsite |

Fields

- runWaiSubsite :: Application

#### Instances

Instances details

ParseRoute WaiSubsite # |
Instance details Defined in Yesod.Core.Types Methods parseRoute :: ([Text], [(Text, Text)]) -> Maybe (Route WaiSubsite) #
RenderRoute WaiSubsite # |

Instance details

Defined in Yesod.Core.Types

Associated Types

data Route WaiSubsite |
Instance details Defined in Yesod.Core.Types data Route WaiSubsite = WaiSubsiteRoute [Text] [(Text, Text)]

Methods

renderRoute :: Route WaiSubsite -> ([Text], [(Text, Text)]) #

YesodSubDispatch WaiSubsite master # |
Instance details Defined in Yesod.Core.Class.Dispatch Methods yesodSubDispatch :: YesodSubRunnerEnv WaiSubsite master -> Application #
Read (Route WaiSubsite) # |
Instance details Defined in Yesod.Core.Types Methods readsPrec :: Int -> ReadS (Route WaiSubsite) # readList :: ReadS [Route WaiSubsite] # readPrec :: ReadPrec (Route WaiSubsite) # readListPrec :: ReadPrec [Route WaiSubsite] #
Show (Route WaiSubsite) # |
Instance details Defined in Yesod.Core.Types Methods showsPrec :: Int -> Route WaiSubsite -> ShowS # show :: Route WaiSubsite -> String # showList :: [Route WaiSubsite] -> ShowS #
Eq (Route WaiSubsite) # |
Instance details Defined in Yesod.Core.Types Methods (==) :: Route WaiSubsite -> Route WaiSubsite -> Bool # (/=) :: Route WaiSubsite -> Route WaiSubsite -> Bool #
Ord (Route WaiSubsite) # |

Instance details

Defined in Yesod.Core.Types

Methods

compare :: Route WaiSubsite -> Route WaiSubsite -> Ordering #

(<) :: Route WaiSubsite -> Route WaiSubsite -> Bool #

(<=) :: Route WaiSubsite -> Route WaiSubsite -> Bool #

(>) :: Route WaiSubsite -> Route WaiSubsite -> Bool #

(>=) :: Route WaiSubsite -> Route WaiSubsite -> Bool #

max :: Route WaiSubsite -> Route WaiSubsite -> Route WaiSubsite #

min :: Route WaiSubsite -> Route WaiSubsite -> Route WaiSubsite #

data Route WaiSubsite # |
Instance details Defined in Yesod.Core.Types data Route WaiSubsite = WaiSubsiteRoute [Text] [(Text, Text)]

newtype WaiSubsiteWithAuth #

Like `WaiSubsite`, but applies parent site's middleware and isAuthorized.

Since: 1.4.34

Constructors

WaiSubsiteWithAuth |

Fields

- runWaiSubsiteWithAuth :: Application

#### Instances

Instances details

ParseRoute WaiSubsiteWithAuth # |
Instance details Defined in Yesod.Core.Types Methods parseRoute :: ([Text], [(Text, Text)]) -> Maybe (Route WaiSubsiteWithAuth) #
RenderRoute WaiSubsiteWithAuth # |

Instance details

Defined in Yesod.Core.Types

Associated Types

data Route WaiSubsiteWithAuth |
Instance details Defined in Yesod.Core.Types data Route WaiSubsiteWithAuth = WaiSubsiteWithAuthRoute [Text] [(Text, Text)]

Methods

renderRoute :: Route WaiSubsiteWithAuth -> ([Text], [(Text, Text)]) #

YesodSubDispatch WaiSubsiteWithAuth master # |
Instance details Defined in Yesod.Core.Class.Dispatch Methods yesodSubDispatch :: YesodSubRunnerEnv WaiSubsiteWithAuth master -> Application #
Read (Route WaiSubsiteWithAuth) # |
Instance details Defined in Yesod.Core.Types Methods readsPrec :: Int -> ReadS (Route WaiSubsiteWithAuth) # readList :: ReadS [Route WaiSubsiteWithAuth] # readPrec :: ReadPrec (Route WaiSubsiteWithAuth) # readListPrec :: ReadPrec [Route WaiSubsiteWithAuth] #
Show (Route WaiSubsiteWithAuth) # |
Instance details Defined in Yesod.Core.Types Methods showsPrec :: Int -> Route WaiSubsiteWithAuth -> ShowS # show :: Route WaiSubsiteWithAuth -> String # showList :: [Route WaiSubsiteWithAuth] -> ShowS #
Eq (Route WaiSubsiteWithAuth) # |
Instance details Defined in Yesod.Core.Types Methods (==) :: Route WaiSubsiteWithAuth -> Route WaiSubsiteWithAuth -> Bool # (/=) :: Route WaiSubsiteWithAuth -> Route WaiSubsiteWithAuth -> Bool #
Ord (Route WaiSubsiteWithAuth) # |

Instance details

Defined in Yesod.Core.Types

Methods

compare :: Route WaiSubsiteWithAuth -> Route WaiSubsiteWithAuth -> Ordering #

(<) :: Route WaiSubsiteWithAuth -> Route WaiSubsiteWithAuth -> Bool #

(<=) :: Route WaiSubsiteWithAuth -> Route WaiSubsiteWithAuth -> Bool #

(>) :: Route WaiSubsiteWithAuth -> Route WaiSubsiteWithAuth -> Bool #

(>=) :: Route WaiSubsiteWithAuth -> Route WaiSubsiteWithAuth -> Bool #

max :: Route WaiSubsiteWithAuth -> Route WaiSubsiteWithAuth -> Route WaiSubsiteWithAuth #

min :: Route WaiSubsiteWithAuth -> Route WaiSubsiteWithAuth -> Route WaiSubsiteWithAuth #

data Route WaiSubsiteWithAuth # |
Instance details Defined in Yesod.Core.Types data Route WaiSubsiteWithAuth = WaiSubsiteWithAuthRoute [Text] [(Text, Text)]