WashNGo-2.12.0.1: WASH is a family of EDSLs for programming Web applications in Haskell.Source codeContentsIndex
WASH.CGI.GuaranteedCGI
Contents
Basics
Links and Images
Page Templates
Forms and Widgets
Form Creation
Form Submission
Textual Input
Checkbox
Button
Image
Selection Box
File
Handle Manipulation
Attribute Shortcuts
Advanced
Installing Translators
Outputable Stuff
Predefined Types for Input Fields
Lowlevel Options
Servlets
HTML and Style
Experimental Stuff
Synopsis
data CGI a
class Monad cgi => CGIMonad cgi
ask :: CGIMonad cgi => WithHTML DOCUMENT cgi a -> cgi ()
tell :: (CGIMonad cgi, CGIOutput a) => a -> cgi ()
io :: (Read a, Show a) => IO a -> CGI a
run :: CGI () -> IO ()
once :: (CGIMonad cgi, Read a, Show a) => cgi a -> cgi a
forever :: CGIMonad cgi => cgi () -> cgi ()
callWithCurrentHistory :: (CGIMonad cgi, Read a, Show a) => ((a -> cgi ()) -> a -> cgi ()) -> a -> cgi ()
htell :: CGIMonad cgi => WithHTML HTML IO () -> cgi a
askOffline :: CGIMonad cgi => WithHTML HTML cgi a -> (Element -> IO ()) -> cgi ()
data Image
internalImage :: CGIMonad cgi => FreeForm -> String -> WithHTML x cgi Image
externalImage :: CGIMonad cgi => URL -> String -> WithHTML x cgi Image
makeImg :: (Monad cgi, AdmitChildIMG y) => Image -> HTMLField cgi IMG y ()
makeRef :: (CGIMonad cgi, AdmitChildA y, Monad m) => String -> WithHTML A m () -> cgi (WithHTML y m ())
makePopupRef :: (CGIMonad cgi, AdmitChildA y) => String -> String -> HTMLField cgi A y ()
makeA :: (CGIMonad cgi, AdmitChildA y) => String -> String -> HTMLField cgi A y ()
backLink :: (AdmitChildA x, Monad m) => HTMLCons A x m ()
hlink :: (AdmitChildA y, Monad m) => URL -> HTMLCons A y m ()
popuplink :: (AdmitChildA y, Monad m) => String -> URL -> HTMLCons A y m ()
restart :: CGI ()
standardPage :: (AdmitChildHTML y, Monad m) => String -> WithHTML BODY m a -> WithHTML y m ()
htmlHeader :: (AdmitChildHTML y, Monad m) => String -> WithHTML HTML m a -> WithHTML y m ()
html :: (Monad m, AdmitChildHTML y) => WithHTML HTML m a -> WithHTML y m ()
cssPage :: (AdmitChildHTML y, Monad m) => String -> String -> WithHTML BODY m a -> WithHTML y m ()
cssHeader :: (AdmitChildHTML y, Monad m) => String -> String -> WithHTML HTML m a -> WithHTML y m ()
type HTMLField cgi x y a = WithHTML x cgi () -> WithHTML y cgi a
makeForm :: AdmitChildFORM y => WithHTML FORM CGI a -> WithHTML y CGI ()
standardQuery :: String -> WithHTML FORM CGI a -> CGI ()
submit :: (CGIMonad cgi, AdmitChildINPUT y, InputHandle h) => h INVALID -> (h VALID -> cgi ()) -> HTMLField cgi INPUT y ()
submit0 :: (CGIMonad cgi, AdmitChildINPUT y) => cgi () -> HTMLField cgi INPUT y ()
defaultSubmit :: (CGIMonad cgi, AdmitChildINPUT y, InputHandle h) => h INVALID -> (h VALID -> cgi ()) -> HTMLField cgi INPUT y ()
resetField :: (CGIMonad cgi, AdmitChildINPUT y) => HTMLField cgi INPUT y (InputField () INVALID)
activeInputField :: (CGIMonad cgi, AdmitChildINPUT y, Reason a, Read a) => (a -> cgi ()) -> HTMLField cgi INPUT y ()
activate :: (CGIMonad cgi, InputHandle (i a), HasValue i, AdmitChildINPUT y) => (a -> cgi ()) -> HTMLField cgi INPUT y (i a INVALID) -> HTMLField cgi INPUT y (i a INVALID)
submitLink :: (CGIMonad cgi, AdmitChildA y, InputHandle h) => h INVALID -> (h VALID -> cgi ()) -> HTMLCons A y cgi ()
submitLink0 :: AdmitChildA y => CGI () -> HTMLCons A y CGI ()
defaultSubmitLink :: (AdmitChildA y, InputHandle h) => h INVALID -> (h VALID -> CGI ()) -> HTMLCons A y CGI ()
submitx :: AdmitChildINPUT y => DTree cgi INPUT y -> HTMLField cgi INPUT y ()
data DTree cgi x y
dtleaf :: CGIMonad cgi => cgi () -> DTree cgi x y
dtnode :: (CGIMonad cgi, InputHandle h) => h INVALID -> (h VALID -> DTree cgi x y) -> DTree cgi x y
inputField :: (CGIMonad cgi, AdmitChildINPUT y, Reason a, Read a) => HTMLField cgi INPUT y (InputField a INVALID)
textInputField :: (CGIMonad cgi, AdmitChildINPUT y) => HTMLField cgi INPUT y (InputField String INVALID)
checkedTextInputField :: (CGIMonad cgi, AdmitChildINPUT y) => (Maybe String -> Maybe String) -> HTMLField cgi INPUT y (InputField String INVALID)
passwordInputField :: (CGIMonad cgi, AdmitChildINPUT y, Reason a, Read a) => HTMLField cgi INPUT y (InputField a INVALID)
makeTextarea :: (CGIMonad cgi, AdmitChildTEXTAREA y) => String -> HTMLField cgi TEXTAREA y (InputField String INVALID)
checkboxInputField :: (CGIMonad cgi, AdmitChildINPUT y) => HTMLField cgi INPUT y (InputField Bool INVALID)
makeButton :: (CGIMonad cgi, AdmitChildINPUT y) => HTMLField cgi INPUT y (InputField Bool INVALID)
data RadioGroup a x
radioGroup :: (CGIMonad cgi, Read a) => WithHTML x cgi (RadioGroup a INVALID)
radioButton :: (CGIMonad cgi, AdmitChildINPUT y, Show a) => RadioGroup a INVALID -> a -> HTMLField cgi INPUT y ()
radioError :: (CGIMonad cgi, AdmitChildIMG x) => RadioGroup a INVALID -> WithHTML x cgi ()
imageField :: (CGIMonad cgi, AdmitChildINPUT y) => Image -> HTMLField cgi INPUT y (InputField (Int, Int) INVALID)
selectMultiple :: (CGIMonad cgi, AdmitChildSELECT y, Eq a) => (a -> String) -> [a] -> [a] -> (Int, Int) -> HTMLField cgi SELECT y (InputField [a] INVALID)
selectSingle :: (CGIMonad cgi, AdmitChildSELECT y, Eq a) => (a -> String) -> Maybe a -> [a] -> HTMLField cgi SELECT y (InputField a INVALID)
selectBounded :: (CGIMonad cgi, AdmitChildSELECT y, Enum a, Bounded a, Read a, Show a, Eq a) => Maybe a -> HTMLField cgi SELECT y (InputField a INVALID)
fileInputField :: (CGIMonad cgi, AdmitChildINPUT y) => HTMLField cgi INPUT y (InputField FileReference INVALID)
checkedFileInputField :: (CGIMonad cgi, AdmitChildINPUT y) => (Maybe FileReference -> Maybe FileReference) -> HTMLField cgi INPUT y (InputField FileReference INVALID)
data InputField a x
data VALID
data INVALID
class InputHandle h
class HasValue i where
value :: i a VALID -> a
data F0 x = F0
data F1 a x = F1 (a x)
data F2 a b x = F2 (a x) (b x)
data F3 a b c x = F3 (a x) (b x) (c x)
data F4 a b c d x = F4 (a x) (b x) (c x) (d x)
data F5 a b c d e x = F5 (a x) (b x) (c x) (d x) (e x)
data F6 a b c d e f x = F6 (a x) (b x) (c x) (d x) (e x) (f x)
data F8 a b c d e f g h x = F8 (a x) (b x) (c x) (d x) (e x) (f x) (g x) (h x)
data FL a x = FL [a x]
data FA a b x = FA a (b x)
fieldSIZE :: (Monad m, AdmitAttrSIZE e, AttrValueSIZE v) => v -> WithHTML e m ()
fieldMAXLENGTH :: (Monad m, AdmitAttrMAXLENGTH e, AttrValueMAXLENGTH v) => v -> WithHTML e m ()
fieldVALUE :: (Monad m, AdmitAttrVALUE e, AttrValueVALUE v) => v -> WithHTML e m ()
runWithHook :: CGIOptions -> ([String] -> CGI ()) -> CGI () -> IO ()
docTranslator :: [FreeForm] -> ([String] -> CGI ()) -> [String] -> CGI ()
lastTranslator :: [String] -> CGI ()
class CGIOutput a
data Status = Status {
statusCode :: Int
statusReason :: String
statusContent :: Maybe (WithHTML () IO ())
}
newtype Location = Location URL
data FreeForm = FreeForm {
ffName :: String
ffContentType :: String
ffRawContents :: String
}
data FileReference = FileReference {
fileReferenceName :: FilePath
fileReferenceContentType :: String
fileReferenceExternalName :: String
}
newtype Text = Text {
unText :: String
}
newtype NonEmpty = NonEmpty {
unNonEmpty :: String
}
newtype AllDigits = AllDigits {
unAllDigits :: String
}
newtype Phone = Phone {
unPhone :: String
}
newtype EmailAddress = EmailAddress {
unEmailAddress :: String
}
newtype CreditCardNumber = CreditCardNumber {
unCreditCardNumber :: String
}
data CreditCardExp = CreditCardExp {
cceMonth :: Int
cceYear :: Int
}
newtype Password = Password {
unPassword :: String
}
data Optional a
= Absent
| Present a
data CGIOption
= NoPort
| AutoPort
| Port Int
| NoHttps
| AutoHttps
| FullURL
| PartialURL
| SessionMode {
unSessionMode :: SessionMode
}
type CGIOptions = [CGIOption]
newtype URL = URL {
unURL :: String
}
makeServlet :: CGI () -> CGIProgram
makeServletWithHook :: ([String] -> CGI ()) -> CGI () -> CGIProgram
module WASH.HTML.HTMLMonad98
module WASH.CGI.Style
data FrameSet
data FrameLayout
= ROWS
| COLS
data FrameSpacing
= FrameAbsolute Int
| FrameRelative Int
| FramePercent Int
makeFrame :: WithHTML FRAME IO () -> CGI () -> CGI FrameSet
makeFrameset :: CGIMonad cgi => FrameLayout -> [(FrameSpacing, cgi FrameSet)] -> cgi FrameSet
framesetPage :: CGIMonad cgi => String -> cgi FrameSet -> cgi ()
Basics
data CGI a Source
class Monad cgi => CGIMonad cgi Source
ask :: CGIMonad cgi => WithHTML DOCUMENT cgi a -> cgi ()Source
tell :: (CGIMonad cgi, CGIOutput a) => a -> cgi ()Source
Terminates script by sending its argument to the browser.
io :: (Read a, Show a) => IO a -> CGI aSource
Safe embedding of an IO action into the CGI monad. Intentionally not parameterized ver its monad to avoid its use inside of transactions.
run :: CGI () -> IO ()Source

Turns a CGI action into an IO action. Used to turn the main CGI action into the main function of the program. Typical use:

 main = run mainCGI
once :: (CGIMonad cgi, Read a, Show a) => cgi a -> cgi aSource
Brackets a CGI action so that only its result is visible. Improves efficiency by not executing the bracketed action after it has been performed once. Use this for avoiding the inefficient buildup of long interaction logs.
forever :: CGIMonad cgi => cgi () -> cgi ()Source
Repeats a CGI action without saving its state so that the size of the interaction log remains constant.
callWithCurrentHistory :: (CGIMonad cgi, Read a, Show a) => ((a -> cgi ()) -> a -> cgi ()) -> a -> cgi ()Source

Control operator for the CGI monad. Its specification is

 callWithCurrentHistory (\backto x -> action x >>= backto) x
 ==
 action x >>= callWithCurrentHistory (\backto x -> action x >>= backto)

However, callWithCurrentHistory is more efficient because it avoids the buildup of long interaction logs by cutting back every time just before action gets executed.

htell :: CGIMonad cgi => WithHTML HTML IO () -> cgi aSource
askOffline :: CGIMonad cgi => WithHTML HTML cgi a -> (Element -> IO ()) -> cgi ()Source
Links and Images
data Image Source
internalImageSource
:: CGIMonad cgi
=> FreeFormthe raw image
-> Stringalternative text
-> WithHTML x cgi Image
Reference to internal image.
externalImageSource
:: CGIMonad cgi
=> URLURL of image
-> Stringalternative text
-> WithHTML x cgi Image
Reference to image by URL.
makeImg :: (Monad cgi, AdmitChildIMG y) => Image -> HTMLField cgi IMG y ()Source
makeRef :: (CGIMonad cgi, AdmitChildA y, Monad m) => String -> WithHTML A m () -> cgi (WithHTML y m ())Source
makePopupRef :: (CGIMonad cgi, AdmitChildA y) => String -> String -> HTMLField cgi A y ()Source
makeA :: (CGIMonad cgi, AdmitChildA y) => String -> String -> HTMLField cgi A y ()Source
backLink :: (AdmitChildA x, Monad m) => HTMLCons A x m ()Source
hlink :: (AdmitChildA y, Monad m) => URL -> HTMLCons A y m ()Source
popuplink :: (AdmitChildA y, Monad m) => String -> URL -> HTMLCons A y m ()Source
restart :: CGI ()Source
Page Templates
standardPage :: (AdmitChildHTML y, Monad m) => String -> WithHTML BODY m a -> WithHTML y m ()Source
htmlHeader :: (AdmitChildHTML y, Monad m) => String -> WithHTML HTML m a -> WithHTML y m ()Source
html :: (Monad m, AdmitChildHTML y) => WithHTML HTML m a -> WithHTML y m ()Source
cssPage :: (AdmitChildHTML y, Monad m) => String -> String -> WithHTML BODY m a -> WithHTML y m ()Source
cssHeader :: (AdmitChildHTML y, Monad m) => String -> String -> WithHTML HTML m a -> WithHTML y m ()Source
Forms and Widgets
type HTMLField cgi x y a = WithHTML x cgi () -> WithHTML y cgi aSource
Every input widget maps the content generator for the widget (which may produce HTML elements or attributes) to the content generator of the widget.
Form Creation
makeForm :: AdmitChildFORM y => WithHTML FORM CGI a -> WithHTML y CGI ()Source
standardQuery :: String -> WithHTML FORM CGI a -> CGI ()Source
Form Submission
submit :: (CGIMonad cgi, AdmitChildINPUT y, InputHandle h) => h INVALID -> (h VALID -> cgi ()) -> HTMLField cgi INPUT y ()Source
submit0 :: (CGIMonad cgi, AdmitChildINPUT y) => cgi () -> HTMLField cgi INPUT y ()Source
defaultSubmit :: (CGIMonad cgi, AdmitChildINPUT y, InputHandle h) => h INVALID -> (h VALID -> cgi ()) -> HTMLField cgi INPUT y ()Source
resetField :: (CGIMonad cgi, AdmitChildINPUT y) => HTMLField cgi INPUT y (InputField () INVALID)Source
activeInputField :: (CGIMonad cgi, AdmitChildINPUT y, Reason a, Read a) => (a -> cgi ()) -> HTMLField cgi INPUT y ()Source
activate :: (CGIMonad cgi, InputHandle (i a), HasValue i, AdmitChildINPUT y) => (a -> cgi ()) -> HTMLField cgi INPUT y (i a INVALID) -> HTMLField cgi INPUT y (i a INVALID)Source
submitLink :: (CGIMonad cgi, AdmitChildA y, InputHandle h) => h INVALID -> (h VALID -> cgi ()) -> HTMLCons A y cgi ()Source
submitLink0 :: AdmitChildA y => CGI () -> HTMLCons A y CGI ()Source
defaultSubmitLink :: (AdmitChildA y, InputHandle h) => h INVALID -> (h VALID -> CGI ()) -> HTMLCons A y CGI ()Source
submitx :: AdmitChildINPUT y => DTree cgi INPUT y -> HTMLField cgi INPUT y ()Source
data DTree cgi x y Source
Abstract type of decisions trees. These trees provide structured validation.
dtleaf :: CGIMonad cgi => cgi () -> DTree cgi x ySource
Create a leaf in a decision tree from a CGI action.
dtnode :: (CGIMonad cgi, InputHandle h) => h INVALID -> (h VALID -> DTree cgi x y) -> DTree cgi x ySource
Create a node in a decision tree. Takes an invalid input field and a continuation. Validates the input field and passes it to the continuation if the validation was successful. The continuation can dispatch on the value of the input field and produces a new decision tree.
Textual Input
inputField :: (CGIMonad cgi, AdmitChildINPUT y, Reason a, Read a) => HTMLField cgi INPUT y (InputField a INVALID)Source
textInputField :: (CGIMonad cgi, AdmitChildINPUT y) => HTMLField cgi INPUT y (InputField String INVALID)Source
checkedTextInputField :: (CGIMonad cgi, AdmitChildINPUT y) => (Maybe String -> Maybe String) -> HTMLField cgi INPUT y (InputField String INVALID)Source
passwordInputField :: (CGIMonad cgi, AdmitChildINPUT y, Reason a, Read a) => HTMLField cgi INPUT y (InputField a INVALID)Source
makeTextarea :: (CGIMonad cgi, AdmitChildTEXTAREA y) => String -> HTMLField cgi TEXTAREA y (InputField String INVALID)Source
Checkbox
checkboxInputField :: (CGIMonad cgi, AdmitChildINPUT y) => HTMLField cgi INPUT y (InputField Bool INVALID)Source
Button
makeButton :: (CGIMonad cgi, AdmitChildINPUT y) => HTMLField cgi INPUT y (InputField Bool INVALID)Source
data RadioGroup a x Source
radioGroup :: (CGIMonad cgi, Read a) => WithHTML x cgi (RadioGroup a INVALID)Source
Create a handle for a new radio group. This handle is invisible on the screen!
radioButton :: (CGIMonad cgi, AdmitChildINPUT y, Show a) => RadioGroup a INVALID -> a -> HTMLField cgi INPUT y ()Source
radioError :: (CGIMonad cgi, AdmitChildIMG x) => RadioGroup a INVALID -> WithHTML x cgi ()Source
Image
imageField :: (CGIMonad cgi, AdmitChildINPUT y) => Image -> HTMLField cgi INPUT y (InputField (Int, Int) INVALID)Source
Selection Box
selectMultiple :: (CGIMonad cgi, AdmitChildSELECT y, Eq a) => (a -> String) -> [a] -> [a] -> (Int, Int) -> HTMLField cgi SELECT y (InputField [a] INVALID)Source
selectSingle :: (CGIMonad cgi, AdmitChildSELECT y, Eq a) => (a -> String) -> Maybe a -> [a] -> HTMLField cgi SELECT y (InputField a INVALID)Source
selectBounded :: (CGIMonad cgi, AdmitChildSELECT y, Enum a, Bounded a, Read a, Show a, Eq a) => Maybe a -> HTMLField cgi SELECT y (InputField a INVALID)Source
File
fileInputField :: (CGIMonad cgi, AdmitChildINPUT y) => HTMLField cgi INPUT y (InputField FileReference INVALID)Source
checkedFileInputField :: (CGIMonad cgi, AdmitChildINPUT y) => (Maybe FileReference -> Maybe FileReference) -> HTMLField cgi INPUT y (InputField FileReference INVALID)Source
Handle Manipulation
data InputField a x Source
data VALID Source
data INVALID Source
class InputHandle h Source
class HasValue i whereSource
Methods
value :: i a VALID -> aSource
extract a value from various kinds of input handles
data F0 x Source
Constructors
F0
data F1 a x Source
Constructors
F1 (a x)
data F2 a b x Source
Constructors
F2 (a x) (b x)
data F3 a b c x Source
Constructors
F3 (a x) (b x) (c x)
data F4 a b c d x Source
Constructors
F4 (a x) (b x) (c x) (d x)
data F5 a b c d e x Source
Constructors
F5 (a x) (b x) (c x) (d x) (e x)
data F6 a b c d e f x Source
Constructors
F6 (a x) (b x) (c x) (d x) (e x) (f x)
data F8 a b c d e f g h x Source
Constructors
F8 (a x) (b x) (c x) (d x) (e x) (f x) (g x) (h x)
data FL a x Source
FL is required to pass an unknown number of handles of the same type need to the callback function in a form submission. The handles need to be collected in a list and then wrapped in the FL data constructor
Constructors
FL [a x]
data FA a b x Source
FA comes handy when you want to tag an input handle with some extra information, which is not itsefl an input handle and which is not validated by a form submission. The tag is the first argument and the handle is the second argument of the data constructor.
Constructors
FA a (b x)
Attribute Shortcuts
fieldSIZE :: (Monad m, AdmitAttrSIZE e, AttrValueSIZE v) => v -> WithHTML e m ()Source
fieldMAXLENGTH :: (Monad m, AdmitAttrMAXLENGTH e, AttrValueMAXLENGTH v) => v -> WithHTML e m ()Source
fieldVALUE :: (Monad m, AdmitAttrVALUE e, AttrValueVALUE v) => v -> WithHTML e m ()Source
Advanced
Installing Translators
runWithHook :: CGIOptions -> ([String] -> CGI ()) -> CGI () -> IO ()Source
Variant of run where an additional argument cgigen specifies an action taken when the script is invoked with a non-empty query string as in script-name?query-string
docTranslator :: [FreeForm] -> ([String] -> CGI ()) -> [String] -> CGI ()Source
A translator is a function [String] -> CGI (). It takes the query string of the URL (of type [String]) and translates it into a CGI action. docTranslator docs next takes a list of FreeForm documents and a next translator. It tries to select a document by its ffName and falls through to the next translator if no document matches.
lastTranslator :: [String] -> CGI ()Source
Terminates a sequence of translators.
Outputable Stuff
class CGIOutput a Source
data Status Source
Constructors
Status
statusCode :: Intstatus code
statusReason :: Stringreason phrase
statusContent :: Maybe (WithHTML () IO ())more explanation
newtype Location Source
Constructors
Location URLredirection
data FreeForm Source
Constructors
FreeForm
ffName :: Stringinternal name
ffContentType :: StringMIME type
ffRawContents :: Stringcontents as octet stream
data FileReference Source
Constructors
FileReference
fileReferenceName :: FilePathvalid local filename where this file can be accessed
fileReferenceContentType :: String
fileReferenceExternalName :: String
Predefined Types for Input Fields
newtype Text Source
Arbitrary string data. No quotes required.
Constructors
Text
unText :: String
newtype NonEmpty Source
Non-empty strings.
Constructors
NonEmpty
unNonEmpty :: String
newtype AllDigits Source
Non-empty strings of digits.
Constructors
AllDigits
unAllDigits :: String
newtype Phone Source
Phone numbers.
Constructors
Phone
unPhone :: String
newtype EmailAddress Source
Reads an email address according to RFC 2822
Constructors
EmailAddress
unEmailAddress :: String
newtype CreditCardNumber Source
Reads a credit card number and performs Luhn check on it.
Constructors
CreditCardNumber
unCreditCardNumber :: String
data CreditCardExp Source
Reads credit card expiration dates in format .
Constructors
CreditCardExp
cceMonth :: Int
cceYear :: Int
newtype Password Source
A Password is a string of length >= 8 with characters taken from at least three of the four sets: lower case characters, upper case characters, digits, and special characters.
Constructors
Password
unPassword :: String
data Optional a Source
Data type for transforming a field into an optional one. The Read syntax of Absent is the empty string, whereas the Read syntax of Present a is just the Read syntax of a. Analogously for Show.
Constructors
Absent
Present a
Lowlevel Options
data CGIOption Source
Constructors
NoPortdo not include port number in generated URLs
AutoPortinclude automatically generated port number in generated URLs (default)
Port Intuse this port number in generated URLs
NoHttpsdo not attempt to detect Https
AutoHttpsautodetect Https by checking for port number 443 and env var HTTPS (default)
FullURLgenerate full URL including scheme, host, and port
PartialURLgenerate absolute path URL, only (default)
SessionMode
unSessionMode :: SessionMode
type CGIOptions = [CGIOption]Source
newtype URL Source
Constructors
URL
unURL :: String
Servlets
makeServlet :: CGI () -> CGIProgramSource
Transform a CGI action into a servlet suitable for running from Marlow's web server.
makeServletWithHook :: ([String] -> CGI ()) -> CGI () -> CGIProgramSource
Like makeServlet with additional CGI generator as in runWithHook.
HTML and Style
module WASH.HTML.HTMLMonad98
module WASH.CGI.Style
Experimental Stuff
data FrameSet Source
Abstract data type of frame set generators.
data FrameLayout Source
Overall layout of a frame set: row-wise or column-wise.
Constructors
ROWS
COLS
data FrameSpacing Source
Division of space between elements of a frameset. See http://wp.netscape.com/assist/net_sites/frame_syntax.html
Constructors
FrameAbsolute Intin pixels
FrameRelative Intthe * format
FramePercent Intthe % format
makeFrame :: WithHTML FRAME IO () -> CGI () -> CGI FrameSetSource
makeFrameset :: CGIMonad cgi => FrameLayout -> [(FrameSpacing, cgi FrameSet)] -> cgi FrameSetSource
Create a frameset, given a layout, its spacing, and its subframe(set)s.
framesetPage :: CGIMonad cgi => String -> cgi FrameSet -> cgi ()Source
Required wrapper for pages with frames. Takes a title and a FrameSet generator and displays the page.
Produced by Haddock version 2.6.1