yesod-purescript-0.0.4.1: Yesod/PureScript/Data.hs
{-# LANGUAGE QuasiQuotes, TemplateHaskell, TypeFamilies, OverloadedStrings #-}
{-# LANGUAGE ViewPatterns #-}
module Yesod.PureScript.Data
where
import Control.Concurrent (MVar)
import Data.Text (Text)
import Data.Time (UTCTime)
import Yesod.Core
import qualified Data.Map.Strict as M
import qualified Language.PureScript as P
data Mode = Dynamic | Static
-- | Per-module compile options.
data CompileOptions = CompileOptions { coMain :: Maybe Text }
-- | Options for Yesod PureScript.
data YesodPureScriptOptions = YesodPureScriptOptions {
-- | Mode of compilation: dynamic or static.
ypsoMode :: Mode,
-- | Source directories to look for ".purs" files.
ypsoSourceDirectories :: [Text],
-- | Defines what and how to compile.
ypsoCompileOptions :: [CompileOptions],
-- | Optionally specifies div id in parent page that will be used to display compilation error if any.
-- This is because usually resulting JS is loaded by HTML page, and it might
-- save a time (esp for trivial errors) if error is displayed directly in HTML.
ypsoErrorDivId :: Maybe Text,
-- | Option passed to PureScript compiler, makes errors verbose.
ypsoVerboseErrors :: Bool
}
-- | This is meant to be stored in synchronized variable.
data PureScriptSiteState = PureScriptSiteState {
-- | A flag telling us if compiler subthread is running.
psssWatchStarted :: Bool,
-- | Results of file parsing, time and either errors as text or list of modules,
-- keyed by file path.
psssModules :: M.Map Text (UTCTime, (Either Text [P.Module])),
-- | Cached modules compiled with "module" and "main" options to Text.
-- Result of compilation is either compile error(s) as Text or
-- the Text of compiled module.
-- Values in map are tuples of time of compilation attempt and compilation result.
psssCompiledModules :: M.Map Text (UTCTime, (Either Text Text))
}
-- | Yesod sub site for PureScript.
data PureScriptSite = PureScriptSite { pssState :: MVar PureScriptSiteState
, pssOptions :: YesodPureScriptOptions }
mkYesodSubData "PureScriptSite" [parseRoutes|
/*Texts PureScriptCompiledR GET
|]