shakespeare-2.1.0.1: A toolkit for making compile-time interpolated templates
Safe HaskellSafe-Inferred
LanguageHaskell2010

Text.Shakespeare

Description

future releases.

Synopsis

Documentation

data ShakespeareSettings #

Constructors

ShakespeareSettings 

Fields

Instances

Instances details
Lift ShakespeareSettings # 
Instance details

Defined in Text.Shakespeare

Methods

lift :: Quote m => ShakespeareSettings -> m Exp #

liftTyped :: forall (m :: Type -> Type). Quote m => ShakespeareSettings -> Code m ShakespeareSettings #

data PreConvert #

Coffeescript, TypeScript, and other languages compiles down to Javascript. Previously we waited until the very end, at the rendering stage to perform this compilation. Lets call is a post-conversion This had the advantage that all Haskell values were inserted first: for example a value could be inserted that Coffeescript would compile into Javascript. While that is perhaps a safer approach, the advantage is not used in practice: it was that way mainly for ease of implementation. The down-side is the template must be compiled down to Javascript during every request. If instead we do a pre-conversion to compile down to Javascript, we only need to perform the compilation once.

The problem then is the insertion of Haskell values: we need a hole for them. This can be done with variables known to the language. During the pre-conversion we first modify all Haskell insertions So #{a} is change to shakespeare_var_a Then we can place the Haskell values in a function wrapper that exposes those variables: (function(shakespeare_var_a){ ... shakespeare_var_a ...}) TypeScript can compile that, and then we tack an application of the Haskell values onto the result: (#{a})

preEscapeIgnoreBalanced is used to not insert backtacks for variable already inside strings or backticks. coffeescript will happily ignore the interpolations, and backticks would not be treated as escaping in that context. preEscapeIgnoreLine was added to ignore comments (which in Coffeescript begin with a #)

Instances

Instances details
Lift PreConvert # 
Instance details

Defined in Text.Shakespeare

Methods

lift :: Quote m => PreConvert -> m Exp #

liftTyped :: forall (m :: Type -> Type). Quote m => PreConvert -> Code m PreConvert #

data WrapInsertion #

Constructors

WrapInsertion 

Instances

Instances details
Lift WrapInsertion # 
Instance details

Defined in Text.Shakespeare

Methods

lift :: Quote m => WrapInsertion -> m Exp #

liftTyped :: forall (m :: Type -> Type). Quote m => WrapInsertion -> Code m WrapInsertion #

data PreConversion #

Constructors

ReadProcess String [String] 
Id 

Instances

Instances details
Lift PreConversion # 
Instance details

Defined in Text.Shakespeare

Methods

lift :: Quote m => PreConversion -> m Exp #

liftTyped :: forall (m :: Type -> Type). Quote m => PreConversion -> Code m PreConversion #

shakespeareFile :: ShakespeareSettings -> FilePath -> Q Exp #

low-level

shakespeareUsedIdentifiers :: ShakespeareSettings -> String -> [(Deref, VarType)] #

Determine which identifiers are used by the given template, useful for creating systems like yesod devel.

type RenderUrl url = url -> QueryParameters -> Text #

data VarType #

Constructors

VTPlain 
VTUrl 
VTUrlParam 
VTMixin 

Instances

Instances details
Data VarType # 
Instance details

Defined in Text.Shakespeare

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> VarType -> c VarType

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c VarType

toConstr :: VarType -> Constr

dataTypeOf :: VarType -> DataType

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c VarType)

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c VarType)

gmapT :: (forall b. Data b => b -> b) -> VarType -> VarType

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> VarType -> r

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> VarType -> r

gmapQ :: (forall d. Data d => d -> u) -> VarType -> [u]

gmapQi :: Int -> (forall d. Data d => d -> u) -> VarType -> u

gmapM :: Monad m => (forall d. Data d => d -> m d) -> VarType -> m VarType

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> VarType -> m VarType

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> VarType -> m VarType

Bounded VarType # 
Instance details

Defined in Text.Shakespeare

Enum VarType # 
Instance details

Defined in Text.Shakespeare

Generic VarType # 
Instance details

Defined in Text.Shakespeare

Associated Types

type Rep VarType :: Type -> Type

Methods

from :: VarType -> Rep VarType x

to :: Rep VarType x -> VarType

Show VarType # 
Instance details

Defined in Text.Shakespeare

Methods

showsPrec :: Int -> VarType -> ShowS

show :: VarType -> String

showList :: [VarType] -> ShowS

Eq VarType # 
Instance details

Defined in Text.Shakespeare

Methods

(==) :: VarType -> VarType -> Bool

(/=) :: VarType -> VarType -> Bool

Ord VarType # 
Instance details

Defined in Text.Shakespeare

Methods

compare :: VarType -> VarType -> Ordering

(<) :: VarType -> VarType -> Bool

(<=) :: VarType -> VarType -> Bool

(>) :: VarType -> VarType -> Bool

(>=) :: VarType -> VarType -> Bool

max :: VarType -> VarType -> VarType

min :: VarType -> VarType -> VarType

type Rep VarType # 
Instance details

Defined in Text.Shakespeare

type Rep VarType = D1 ('MetaData "VarType" "Text.Shakespeare" "shakespeare-2.1.0.1-ESJJpBnM5kH6Laeb0it0gi" 'False) ((C1 ('MetaCons "VTPlain" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "VTUrl" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "VTUrlParam" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "VTMixin" 'PrefixI 'False) (U1 :: Type -> Type)))

data Deref #

Instances

Instances details
Data Deref # 
Instance details

Defined in Text.Shakespeare.Base

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Deref -> c Deref

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Deref

toConstr :: Deref -> Constr

dataTypeOf :: Deref -> DataType

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Deref)

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Deref)

gmapT :: (forall b. Data b => b -> b) -> Deref -> Deref

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Deref -> r

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Deref -> r

gmapQ :: (forall d. Data d => d -> u) -> Deref -> [u]

gmapQi :: Int -> (forall d. Data d => d -> u) -> Deref -> u

gmapM :: Monad m => (forall d. Data d => d -> m d) -> Deref -> m Deref

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Deref -> m Deref

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Deref -> m Deref

Read Deref # 
Instance details

Defined in Text.Shakespeare.Base

Methods

readsPrec :: Int -> ReadS Deref

readList :: ReadS [Deref]

readPrec :: ReadPrec Deref

readListPrec :: ReadPrec [Deref]

Show Deref # 
Instance details

Defined in Text.Shakespeare.Base

Methods

showsPrec :: Int -> Deref -> ShowS

show :: Deref -> String

showList :: [Deref] -> ShowS

Eq Deref # 
Instance details

Defined in Text.Shakespeare.Base

Methods

(==) :: Deref -> Deref -> Bool

(/=) :: Deref -> Deref -> Bool

Ord Deref # 
Instance details

Defined in Text.Shakespeare.Base

Methods

compare :: Deref -> Deref -> Ordering

(<) :: Deref -> Deref -> Bool

(<=) :: Deref -> Deref -> Bool

(>) :: Deref -> Deref -> Bool

(>=) :: Deref -> Deref -> Bool

max :: Deref -> Deref -> Deref

min :: Deref -> Deref -> Deref

Lift Deref # 
Instance details

Defined in Text.Shakespeare.Base

Methods

lift :: Quote m => Deref -> m Exp #

liftTyped :: forall (m :: Type -> Type). Quote m => Deref -> Code m Deref #

type Parser = Parsec String [String] #

A parser with a user state of [String]

preFilter #

Arguments

:: Maybe FilePath

for error reporting

-> ShakespeareSettings 
-> String 
-> IO String 

Internal

shakespeareRuntime :: ShakespeareSettings -> FilePath -> [(Deref, VarExp url)] -> Shakespeare url #

pack' :: String -> Text #