wai-app-static- WAI application for static serving

Safe HaskellNone





data Piece Source

An individual component of a path, or of a filepath.

This is the core type used by wai-app-static for doing lookups. It provides a smart constructor to avoid the possibility of constructing unsafe path segments (though unsafeToPiece can get around that as necessary).

Individual file lookup backends must know how to convert from a Piece to their storage system.


toPiece :: Text -> Maybe PieceSource

Smart constructor for a Piece. Won't allow unsafe components, such as pieces beginning with a period or containing a slash. This will, however, allow null pieces.

unsafeToPiece :: Text -> PieceSource

Construct a Piece without input validation.

type Pieces = [Piece]Source

Request coming from a user. Corresponds to pathInfo.

toPieces :: [Text] -> Maybe PiecesSource

Call toPiece on a list.

 toPieces = mapM toPiece


data MaxAge Source

Values for the max-age component of the cache-control response header.



no cache-control set

MaxAgeSeconds Int

set to the given number of seconds


essentially infinite caching; in reality, probably one year

File/folder serving

type FolderName = PieceSource

Just the name of a folder.

data Folder Source

Represent contents of a single folder, which can be itself either a file or a folder.



data File Source

Information on an individual file.




fileGetSize :: Int

Size of file in bytes

fileToResponse :: Status -> ResponseHeaders -> Response

How to construct a WAI response for this file. Some files are stored on the filesystem and can use ResponseFile, while others are stored in memory and should use ResponseBuilder.

fileName :: Piece

Last component of the filename.

fileGetHash :: IO (Maybe ByteString)

Calculate a hash of the contents of this file, such as for etag.

fileGetModified :: Maybe EpochTime

Last modified time, used for both display in listings and if-modified-since.

data LookupResult Source

Result of looking up a file in some storage backend.

The lookup is either a file or folder, or does not exist.

type Listing = Pieces -> Folder -> IO BuilderSource

How to construct a directory listing page for the given request path and the resulting folder.


data StaticSettings Source

All of the settings available to users for tweaking wai-app-static.

Note that you should use the settings type approach for modifying values. See http://www.yesodweb.com/book/settings-types for more information.




ssLookupFile :: Pieces -> IO LookupResult

Lookup a single file or folder. This is how you can control storage backend (filesystem, embedded, etc) and where to lookup.

ssGetMimeType :: File -> IO MimeType

Determine the mime type of the given file. Note that this function lives in IO in case you want to perform more complicated mimetype analysis, such as via the file utility.

ssIndices :: [Piece]

Ordered list of filenames to be used for indices. If the user requests a folder, and a file with the given name is found in that folder, that file is served. This supercedes any directory listing.

ssListing :: Maybe Listing

How to perform a directory listing. Optional. Will be used when the user requested a folder.

ssMaxAge :: MaxAge

Value to provide for max age in the cache-control.

ssMkRedirect :: Pieces -> ByteString -> ByteString

Given a requested path and a new destination, construct a string that will go there. Default implementation will use relative paths.

ssRedirectToIndex :: Bool

If True, send a redirect to the user when a folder is requested and an index page should be displayed. When False, display the content immediately.

ssUseHash :: Bool

Prefer usage of etag caching to last-modified caching.