EmaSite

The EmaSite typeclass “orchestrates” and ties-together the whole site pipeline. The instance is written on the top-level site Route type, which in turn enables using the Ema.runSite function to run the site from main entrypoint of your Haskell project.

%%{init: {'theme': 'forest', "flowchart" : { "curve" : "basis" } } }%%
stateDiagram
    direction LR
    dynModel: Dynamic m Model
    SiteArg --> siteInput
    siteInput --> siteOutput : Model
    state siteInput {
      direction LR
      dynModel
    }
    state siteOutput {
      direction LR
      SiteOutput
    }
    Route --> siteOutput
    siteOutput --> Asset

SiteArg

The SiteArg type specifies the options required to run the site. Typically these come from command line arguments and other environment. The value of this type is passed to the siteInput method of the EmaSite typeclass, as well as taken by the Ema.runSite function (which is called from main).

SiteArg is () by default (meaning, it is unused).

siteInput

The siteInput method takes a SiteArg value (and other relevant parameters) and returns a Dynamic of the site’s Model type.

siteOutput

The siteOutput method takes the Model type value snapshot at that point in time, as well as the route value to render and returns a Asset output (typically HTML bytestring) for it. siteOutput has IO capabilities; usually it is defined as a pure function (siteOutput ... = pure <expr>) inasmuch as all the data required to render the site is contained in the Model type, but sometimes you may need IO (example).

Note that this method may return a non-Asset type as well (as specified by SiteOutput type). This can be useful in sub-sites that are composed manually at the top-level.