-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | JavaScript parser and pretty-printer library -- -- Tools for working with ECMAScript 3 (popularly known as JavaScript). -- Includes a parser, pretty-printer, tools for working with source tree -- annotations and an arbitrary instance. See CHANGELOG for a summary of -- changes. The package follows the Haskell Package Versioning Policy -- since version 0.17.0.1. @package language-ecmascript @version 0.18 -- | This isn't a lexer in the sense that it provides a JavaScript -- token-stream. This module provides character-parsers for various -- JavaScript tokens. module Language.ECMAScript3.Lexer lexeme :: Stream s Identity Char => Parser s a -> Parser s a identifier :: Stream s Identity Char => Parser s String reserved :: Stream s Identity Char => String -> Parser s () operator :: Stream s Identity Char => Parser s String reservedOp :: Stream s Identity Char => String -> Parser s () charLiteral :: Stream s Identity Char => Parser s Char stringLiteral :: Stream s Identity Char => Parser s String symbol :: Stream s Identity Char => String -> Parser s String whiteSpace :: Stream s Identity Char => Parser s () parens :: Stream s Identity Char => Parser s a -> Parser s a braces :: Stream s Identity Char => Parser s a -> Parser s a brackets :: Stream s Identity Char => Parser s a -> Parser s a squares :: Stream s Identity Char => Parser s a -> Parser s a semi :: Stream s Identity Char => Parser s String comma :: Stream s Identity Char => Parser s String colon :: Stream s Identity Char => Parser s String dot :: Stream s Identity Char => Parser s String identifierStart :: Stream s Identity Char => Parser s Char hexIntLit :: Stream s Identity Char => Parser s String decIntLit :: Stream s Identity Char => Parser s String decDigits :: Stream s Identity Char => Parser s String decDigitsOpt :: Stream s Identity Char => Parser s String exponentPart :: Stream s Identity Char => Parser s String -- | returns (s, True) if the number is an integer, an (s, False) otherwise decLit :: Stream s Identity Char => Parser s (String, Bool) -- | ECMAScript 3 syntax. Spec refers to the ECMA-262 specification, -- 3rd edition. module Language.ECMAScript3.Syntax data JavaScript a -- | A script in <script> ... </script> tags. Script :: a -> [Statement a] -> JavaScript a -- | extracts statements from a JavaScript type unJavaScript :: JavaScript a -> [Statement a] -- | Statements, spec 12. data Statement a -- | {stmts}, spec 12.1 BlockStmt :: a -> [Statement a] -> Statement a -- | ;, spec 12.3 EmptyStmt :: a -> Statement a -- | expr;, spec 12.4 ExprStmt :: a -> (Expression a) -> Statement a -- | if (e) stmt, spec 12.5 IfStmt :: a -> (Expression a) -> (Statement a) -> (Statement a) -> Statement a -- | if (e) stmt1 else stmt2, spec 12.5 IfSingleStmt :: a -> (Expression a) -> (Statement a) -> Statement a -- | switch (e) clauses, spec 12.11 SwitchStmt :: a -> (Expression a) -> [CaseClause a] -> Statement a -- | while (e) do stmt, spec 12.6 WhileStmt :: a -> (Expression a) -> (Statement a) -> Statement a -- | do stmt while (e);, spec 12.6 DoWhileStmt :: a -> (Statement a) -> (Expression a) -> Statement a -- | break lab;, spec 12.8 BreakStmt :: a -> (Maybe (Id a)) -> Statement a -- | continue lab;, spec 12.7 ContinueStmt :: a -> (Maybe (Id a)) -> Statement a -- | lab: stmt, spec 12.12 LabelledStmt :: a -> (Id a) -> (Statement a) -> Statement a -- | for (x in o) stmt, spec 12.6 ForInStmt :: a -> (ForInInit a) -> (Expression a) -> (Statement a) -> Statement a -- | ForStmt a init test increment body, for (init; test, -- increment) body, spec 12.6 ForStmt :: a -> (ForInit a) -> (Maybe (Expression a)) -> (Maybe (Expression a)) -> (Statement a) -> Statement a -- | try stmt catch(x) stmt finally stmt, spec 12.14 TryStmt :: a -> (Statement a) -> (Maybe (CatchClause a)) -> (Maybe (Statement a)) -> Statement a -- | throw expr;, spec 12.13 ThrowStmt :: a -> (Expression a) -> Statement a -- | return expr;, spec 12.9 ReturnStmt :: a -> (Maybe (Expression a)) -> Statement a -- | with (o) stmt, spec 12.10 WithStmt :: a -> (Expression a) -> (Statement a) -> Statement a -- | var x, y=42;, spec 12.2 VarDeclStmt :: a -> [VarDecl a] -> Statement a -- | function f(x, y, z) {...}, spec 13 FunctionStmt :: a -> (Id a) -> [Id a] -> [Statement a] -> Statement a -- | Returns True if the statement is an IterationStatement -- according to spec 12.6. isIterationStmt :: Statement a -> Bool -- | Case clauses, spec 12.11 data CaseClause a -- |
--   case e: stmts;
--   
CaseClause :: a -> (Expression a) -> [Statement a] -> CaseClause a -- |
--   default: stmts;
--   
CaseDefault :: a -> [Statement a] -> CaseClause a -- | Catch clause, spec 12.14 data CatchClause a -- |
--   catch (x) {...}
--   
CatchClause :: a -> (Id a) -> (Statement a) -> CatchClause a -- | for initializer, spec 12.6 data ForInit a -- | empty NoInit :: ForInit a -- |
--   var x, y=42
--   
VarInit :: [VarDecl a] -> ForInit a -- |
--   expr
--   
ExprInit :: (Expression a) -> ForInit a -- | for..in initializer, spec 12.6 data ForInInit a -- |
--   var x
--   
ForInVar :: (Id a) -> ForInInit a -- | foo.baz, foo[bar], z ForInLVal :: (LValue a) -> ForInInit a -- | A variable declaration, spec 12.2 data VarDecl a -- |
--   var x = e;
--   
VarDecl :: a -> (Id a) -> (Maybe (Expression a)) -> VarDecl a -- | Expressions, see spec 11 data Expression a -- | "foo", spec 11.1.3, 7.8 StringLit :: a -> String -> Expression a -- | RegexpLit a regexp global? case_insensitive? -- regular -- expression, see spec 11.1.3, 7.8 RegexpLit :: a -> String -> Bool -> Bool -> Expression a -- | 41.99999, spec 11.1.3, 7.8 NumLit :: a -> Double -> Expression a -- | 42, spec 11.1.3, 7.8 IntLit :: a -> Int -> Expression a -- | true, spec 11.1.3, 7.8 BoolLit :: a -> Bool -> Expression a -- | null, spec 11.1.3, 7.8 NullLit :: a -> Expression a -- | [1,2,3], spec 11.1.4 ArrayLit :: a -> [Expression a] -> Expression a -- | {foo:"bar", baz: 42}, spec 11.1.5 ObjectLit :: a -> [(Prop a, Expression a)] -> Expression a -- | this, spec 11.1.1 ThisRef :: a -> Expression a -- | foo, spec 11.1.2 VarRef :: a -> (Id a) -> Expression a -- | foo.bar, spec 11.2.1 DotRef :: a -> (Expression a) -> (Id a) -> Expression a -- | foo[bar, spec 11.2.1 BracketRef :: a -> (Expression a) -> (Expression a) -> Expression a -- | new foo(bar), spec 11.2.2 NewExpr :: a -> (Expression a) -> [Expression a] -> Expression a -- | @e, spec 11.4 (excluding 11.4.4, 111.4.5) PrefixExpr :: a -> PrefixOp -> (Expression a) -> Expression a -- | ++x, x-- etc., spec 11.3, 11.4.4, 11.4.5 UnaryAssignExpr :: a -> UnaryAssignOp -> (LValue a) -> Expression a -- | e1@e2, spec 11.5, 11.6, 11.7, 11.8, 11.9, 11.10, 11.11 InfixExpr :: a -> InfixOp -> (Expression a) -> (Expression a) -> Expression a -- | e1 ? e2 : e3, spec 11.12 CondExpr :: a -> (Expression a) -> (Expression a) -> (Expression a) -> Expression a -- | e1 @=e2, spec 11.13 AssignExpr :: a -> AssignOp -> (LValue a) -> (Expression a) -> Expression a -- | e1, e2, spec 11.14 ListExpr :: a -> [Expression a] -> Expression a -- | f(x,y,z), spec 11.2.3 funcexprs are optionally named CallExpr :: a -> (Expression a) -> [Expression a] -> Expression a -- | function f (x,y,z) {...}, spec 11.2.5, 13 FuncExpr :: a -> (Maybe (Id a)) -> [Id a] -> [Statement a] -> Expression a -- | Infix operators: see spec 11.5-11.11 data InfixOp -- |
--   <
--   
OpLT :: InfixOp -- |
--   <=
--   
OpLEq :: InfixOp -- |
--   >
--   
OpGT :: InfixOp -- |
--   >=
--   
OpGEq :: InfixOp -- |
--   in
--   
OpIn :: InfixOp -- |
--   instanceof
--   
OpInstanceof :: InfixOp -- |
--   ==
--   
OpEq :: InfixOp -- |
--   !=
--   
OpNEq :: InfixOp -- |
--   ===
--   
OpStrictEq :: InfixOp -- |
--   !===
--   
OpStrictNEq :: InfixOp -- |
--   &&
--   
OpLAnd :: InfixOp -- |
--   ||
--   
OpLOr :: InfixOp -- |
--   *
--   
OpMul :: InfixOp -- |
--   /
--   
OpDiv :: InfixOp -- |
--   %
--   
OpMod :: InfixOp -- |
--   -
--   
OpSub :: InfixOp -- |
--   <<
--   
OpLShift :: InfixOp -- |
--   >>
--   
OpSpRShift :: InfixOp -- |
--   >>>
--   
OpZfRShift :: InfixOp -- |
--   &
--   
OpBAnd :: InfixOp -- |
--   ^
--   
OpBXor :: InfixOp -- |
--   |
--   
OpBOr :: InfixOp -- |
--   +
--   
OpAdd :: InfixOp -- | Assignment operators: see spec 11.13 data AssignOp -- | simple assignment, = OpAssign :: AssignOp -- |
--   +=
--   
OpAssignAdd :: AssignOp -- |
--   -=
--   
OpAssignSub :: AssignOp -- |
--   *=
--   
OpAssignMul :: AssignOp -- |
--   /=
--   
OpAssignDiv :: AssignOp -- |
--   %=
--   
OpAssignMod :: AssignOp -- |
--   <<=
--   
OpAssignLShift :: AssignOp -- |
--   >>=
--   
OpAssignSpRShift :: AssignOp -- |
--   >>>=
--   
OpAssignZfRShift :: AssignOp -- |
--   &=
--   
OpAssignBAnd :: AssignOp -- |
--   ^=
--   
OpAssignBXor :: AssignOp -- |
--   |=
--   
OpAssignBOr :: AssignOp data Id a Id :: a -> String -> Id a unId :: Id a -> String -- | Prefix operators: see spec 11.4 (excluding 11.4.4, 11.4.5) data PrefixOp -- |
--   !
--   
PrefixLNot :: PrefixOp -- |
--   ~
--   
PrefixBNot :: PrefixOp -- |
--   +
--   
PrefixPlus :: PrefixOp -- |
--   -
--   
PrefixMinus :: PrefixOp -- |
--   typeof
--   
PrefixTypeof :: PrefixOp -- |
--   void
--   
PrefixVoid :: PrefixOp -- |
--   delete
--   
PrefixDelete :: PrefixOp -- | Property names in an object initializer: see spec 11.1.5 data Prop a -- | property name is an identifier, foo PropId :: a -> (Id a) -> Prop a -- | property name is a string, "foo" PropString :: a -> String -> Prop a -- | property name is an integer, 42 PropNum :: a -> Integer -> Prop a -- | Unary assignment operators: see spec 11.3, 11.4.4, 11.4.5 data UnaryAssignOp -- |
--   ++x
--   
PrefixInc :: UnaryAssignOp -- |
--   --x
--   
PrefixDec :: UnaryAssignOp -- |
--   x++
--   
PostfixInc :: UnaryAssignOp -- |
--   x--
--   
PostfixDec :: UnaryAssignOp -- | Left-hand side expressions: see spec 11.2 data LValue a -- | variable reference, foo LVar :: a -> String -> LValue a -- |
--   foo.bar
--   
LDot :: a -> (Expression a) -> String -> LValue a -- |
--   foo[bar]
--   
LBracket :: a -> (Expression a) -> (Expression a) -> LValue a -- | The abstract data type SourcePos represents source positions. -- It contains the name of the source (i.e. file name), a line number and -- a column number. SourcePos is an instance of the Show, -- Eq and Ord class. data SourcePos :: * -- | The ECMAScript standard defines certain syntactic restrictions on -- programs (or, more precisely, statements) that aren't easily enforced -- in the AST datatype. These restrictions have to do with labeled -- statements and break/continue statement, as well as identifier names. -- Thus, it is possible to manually generate AST's that correspond to -- syntactically incorrect programs. Use this predicate to check if an -- JavaScript AST corresponds to a syntactically correct -- ECMAScript program. isValid :: forall a. (Data a, Typeable a) => JavaScript a -> Bool -- | Checks if an identifier name is valid according to the spec isValidIdentifier :: Id a -> Bool -- | Checks if the String represents a valid identifier name isValidIdentifierName :: String -> Bool -- | Checks if a string is in the list of reserved ECMAScript words isReservedWord :: String -> Bool -- | Checks if a character is valid at the start of an identifier isValidIdStart :: Char -> Bool -- | Checks if a character is valid in an identifier part isValidIdPart :: Char -> Bool data EnclosingStatement -- | The enclosing statement is an iteration statement EnclosingIter :: [Label] -> EnclosingStatement -- | The enclosing statement is a switch statement EnclosingSwitch :: [Label] -> EnclosingStatement -- | The enclosing statement is some other statement. Note, -- EnclosingOther is never pushed if the current labelSet -- is empty, so the list of labels in this constructor should always be -- non-empty EnclosingOther :: [Label] -> EnclosingStatement pushLabel :: Monad m => Id b -> StateT ([Label], [EnclosingStatement]) m a -> StateT ([Label], [EnclosingStatement]) m a pushEnclosing :: Monad m => ([Label] -> EnclosingStatement) -> StateT ([Label], [EnclosingStatement]) m a -> StateT ([Label], [EnclosingStatement]) m a class HasLabelSet a getLabelSet :: HasLabelSet a => a -> [Label] setLabelSet :: HasLabelSet a => [Label] -> a -> a isIter :: EnclosingStatement -> Bool isIterSwitch :: EnclosingStatement -> Bool instance Data.Traversable.Traversable Language.ECMAScript3.Syntax.JavaScript instance Data.Foldable.Foldable Language.ECMAScript3.Syntax.JavaScript instance GHC.Base.Functor Language.ECMAScript3.Syntax.JavaScript instance GHC.Classes.Ord a => GHC.Classes.Ord (Language.ECMAScript3.Syntax.JavaScript a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Language.ECMAScript3.Syntax.JavaScript a) instance Data.Data.Data a => Data.Data.Data (Language.ECMAScript3.Syntax.JavaScript a) instance GHC.Show.Show a => GHC.Show.Show (Language.ECMAScript3.Syntax.JavaScript a) instance Data.Traversable.Traversable Language.ECMAScript3.Syntax.CaseClause instance Data.Foldable.Foldable Language.ECMAScript3.Syntax.CaseClause instance GHC.Base.Functor Language.ECMAScript3.Syntax.CaseClause instance GHC.Classes.Ord a => GHC.Classes.Ord (Language.ECMAScript3.Syntax.CaseClause a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Language.ECMAScript3.Syntax.CaseClause a) instance Data.Data.Data a => Data.Data.Data (Language.ECMAScript3.Syntax.CaseClause a) instance GHC.Show.Show a => GHC.Show.Show (Language.ECMAScript3.Syntax.CaseClause a) instance Data.Traversable.Traversable Language.ECMAScript3.Syntax.CatchClause instance Data.Foldable.Foldable Language.ECMAScript3.Syntax.CatchClause instance GHC.Base.Functor Language.ECMAScript3.Syntax.CatchClause instance GHC.Classes.Ord a => GHC.Classes.Ord (Language.ECMAScript3.Syntax.CatchClause a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Language.ECMAScript3.Syntax.CatchClause a) instance Data.Data.Data a => Data.Data.Data (Language.ECMAScript3.Syntax.CatchClause a) instance GHC.Show.Show a => GHC.Show.Show (Language.ECMAScript3.Syntax.CatchClause a) instance Data.Traversable.Traversable Language.ECMAScript3.Syntax.VarDecl instance Data.Foldable.Foldable Language.ECMAScript3.Syntax.VarDecl instance GHC.Base.Functor Language.ECMAScript3.Syntax.VarDecl instance GHC.Classes.Ord a => GHC.Classes.Ord (Language.ECMAScript3.Syntax.VarDecl a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Language.ECMAScript3.Syntax.VarDecl a) instance Data.Data.Data a => Data.Data.Data (Language.ECMAScript3.Syntax.VarDecl a) instance GHC.Show.Show a => GHC.Show.Show (Language.ECMAScript3.Syntax.VarDecl a) instance Data.Traversable.Traversable Language.ECMAScript3.Syntax.ForInit instance Data.Foldable.Foldable Language.ECMAScript3.Syntax.ForInit instance GHC.Base.Functor Language.ECMAScript3.Syntax.ForInit instance GHC.Classes.Ord a => GHC.Classes.Ord (Language.ECMAScript3.Syntax.ForInit a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Language.ECMAScript3.Syntax.ForInit a) instance Data.Data.Data a => Data.Data.Data (Language.ECMAScript3.Syntax.ForInit a) instance GHC.Show.Show a => GHC.Show.Show (Language.ECMAScript3.Syntax.ForInit a) instance Data.Traversable.Traversable Language.ECMAScript3.Syntax.Expression instance Data.Foldable.Foldable Language.ECMAScript3.Syntax.Expression instance GHC.Base.Functor Language.ECMAScript3.Syntax.Expression instance GHC.Classes.Ord a => GHC.Classes.Ord (Language.ECMAScript3.Syntax.Expression a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Language.ECMAScript3.Syntax.Expression a) instance Data.Data.Data a => Data.Data.Data (Language.ECMAScript3.Syntax.Expression a) instance GHC.Show.Show a => GHC.Show.Show (Language.ECMAScript3.Syntax.Expression a) instance Data.Traversable.Traversable Language.ECMAScript3.Syntax.LValue instance Data.Foldable.Foldable Language.ECMAScript3.Syntax.LValue instance GHC.Base.Functor Language.ECMAScript3.Syntax.LValue instance Data.Data.Data a => Data.Data.Data (Language.ECMAScript3.Syntax.LValue a) instance GHC.Classes.Ord a => GHC.Classes.Ord (Language.ECMAScript3.Syntax.LValue a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Language.ECMAScript3.Syntax.LValue a) instance GHC.Show.Show a => GHC.Show.Show (Language.ECMAScript3.Syntax.LValue a) instance Data.Traversable.Traversable Language.ECMAScript3.Syntax.ForInInit instance Data.Foldable.Foldable Language.ECMAScript3.Syntax.ForInInit instance GHC.Base.Functor Language.ECMAScript3.Syntax.ForInInit instance GHC.Classes.Ord a => GHC.Classes.Ord (Language.ECMAScript3.Syntax.ForInInit a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Language.ECMAScript3.Syntax.ForInInit a) instance Data.Data.Data a => Data.Data.Data (Language.ECMAScript3.Syntax.ForInInit a) instance GHC.Show.Show a => GHC.Show.Show (Language.ECMAScript3.Syntax.ForInInit a) instance Data.Traversable.Traversable Language.ECMAScript3.Syntax.Statement instance Data.Foldable.Foldable Language.ECMAScript3.Syntax.Statement instance GHC.Base.Functor Language.ECMAScript3.Syntax.Statement instance GHC.Classes.Ord a => GHC.Classes.Ord (Language.ECMAScript3.Syntax.Statement a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Language.ECMAScript3.Syntax.Statement a) instance Data.Data.Data a => Data.Data.Data (Language.ECMAScript3.Syntax.Statement a) instance GHC.Show.Show a => GHC.Show.Show (Language.ECMAScript3.Syntax.Statement a) instance Data.Traversable.Traversable Language.ECMAScript3.Syntax.Prop instance Data.Foldable.Foldable Language.ECMAScript3.Syntax.Prop instance GHC.Base.Functor Language.ECMAScript3.Syntax.Prop instance GHC.Classes.Ord a => GHC.Classes.Ord (Language.ECMAScript3.Syntax.Prop a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Language.ECMAScript3.Syntax.Prop a) instance Data.Data.Data a => Data.Data.Data (Language.ECMAScript3.Syntax.Prop a) instance GHC.Show.Show a => GHC.Show.Show (Language.ECMAScript3.Syntax.Prop a) instance GHC.Classes.Ord Language.ECMAScript3.Syntax.PrefixOp instance GHC.Classes.Eq Language.ECMAScript3.Syntax.PrefixOp instance Data.Data.Data Language.ECMAScript3.Syntax.PrefixOp instance GHC.Show.Show Language.ECMAScript3.Syntax.PrefixOp instance GHC.Classes.Ord Language.ECMAScript3.Syntax.UnaryAssignOp instance GHC.Classes.Eq Language.ECMAScript3.Syntax.UnaryAssignOp instance Data.Data.Data Language.ECMAScript3.Syntax.UnaryAssignOp instance GHC.Show.Show Language.ECMAScript3.Syntax.UnaryAssignOp instance GHC.Classes.Ord Language.ECMAScript3.Syntax.AssignOp instance GHC.Classes.Eq Language.ECMAScript3.Syntax.AssignOp instance Data.Data.Data Language.ECMAScript3.Syntax.AssignOp instance GHC.Show.Show Language.ECMAScript3.Syntax.AssignOp instance GHC.Enum.Enum Language.ECMAScript3.Syntax.InfixOp instance GHC.Classes.Ord Language.ECMAScript3.Syntax.InfixOp instance GHC.Classes.Eq Language.ECMAScript3.Syntax.InfixOp instance Data.Data.Data Language.ECMAScript3.Syntax.InfixOp instance GHC.Show.Show Language.ECMAScript3.Syntax.InfixOp instance Data.Traversable.Traversable Language.ECMAScript3.Syntax.Id instance Data.Foldable.Foldable Language.ECMAScript3.Syntax.Id instance GHC.Base.Functor Language.ECMAScript3.Syntax.Id instance Data.Data.Data a => Data.Data.Data (Language.ECMAScript3.Syntax.Id a) instance GHC.Classes.Ord a => GHC.Classes.Ord (Language.ECMAScript3.Syntax.Id a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Language.ECMAScript3.Syntax.Id a) instance GHC.Show.Show a => GHC.Show.Show (Language.ECMAScript3.Syntax.Id a) instance GHC.Show.Show Language.ECMAScript3.Syntax.EnclosingStatement instance Language.ECMAScript3.Syntax.HasLabelSet Language.ECMAScript3.Syntax.EnclosingStatement instance Data.Default.Class.Default a => Data.Default.Class.Default (Language.ECMAScript3.Syntax.JavaScript a) instance Data.Default.Class.Default Text.Parsec.Pos.SourcePos -- | Pretty-printing JavaScript. module Language.ECMAScript3.PrettyPrint -- | A class of pretty-printable ECMAScript AST nodes. Will pretty-print -- correct JavaScript given that the isValid predicate holds for -- the AST. class Pretty a -- | Pretty-print an ECMAScript AST node. Use render or -- show to convert Doc to String. prettyPrint :: Pretty a => a -> Doc -- | DEPRECATED: Use prettyPrint instead! Renders a JavaScript -- program as a document, the show instance of Doc will -- pretty-print it automatically -- | Deprecated: These interfaces are outdated and would be -- removed/hidden in version 1.0. Use the Pretty class instead. javaScript :: JavaScript a -> Doc -- | DEPRECATED: Use prettyPrint instead! Renders a list of -- statements as a String -- | Deprecated: These interfaces are outdated and would be -- removed/hidden in version 1.0. Use the Pretty class instead. renderStatements :: [Statement a] -> String -- | DEPRECATED: Use prettyPrint instead! Renders a list of -- statements as a String -- | Deprecated: These interfaces are outdated and would be -- removed/hidden in version 1.0. Use the Pretty class instead. renderExpression :: Expression a -> String -- | Deprecated: These interfaces are outdated and would be -- removed/hidden in version 1.0. Use the Pretty class instead. class PP a pp :: PP a => a -> Doc -- | A predicate to tell if the expression --when pretty-printed-- will -- begin with "function" or '{' and be thus unsafe to use in an -- expression statement without wrapping it in '()'. unsafeInExprStmt :: Expression a -> Bool instance Language.ECMAScript3.PrettyPrint.Pretty a => Language.ECMAScript3.PrettyPrint.PP a instance Language.ECMAScript3.PrettyPrint.Pretty (Language.ECMAScript3.Syntax.JavaScript a) instance Language.ECMAScript3.PrettyPrint.Pretty [Language.ECMAScript3.Syntax.Statement a] instance Language.ECMAScript3.PrettyPrint.Pretty (Language.ECMAScript3.Syntax.Expression a) instance Language.ECMAScript3.PrettyPrint.Pretty (Language.ECMAScript3.Syntax.Statement a) instance Language.ECMAScript3.PrettyPrint.Pretty (Language.ECMAScript3.Syntax.CatchClause a) instance Language.ECMAScript3.PrettyPrint.Pretty (Language.ECMAScript3.Syntax.ForInit a) instance Language.ECMAScript3.PrettyPrint.Pretty (Language.ECMAScript3.Syntax.ForInInit a) instance Language.ECMAScript3.PrettyPrint.Pretty (Language.ECMAScript3.Syntax.LValue a) instance Language.ECMAScript3.PrettyPrint.Pretty (Language.ECMAScript3.Syntax.VarDecl a) instance Language.ECMAScript3.PrettyPrint.Pretty (Language.ECMAScript3.Syntax.CaseClause a) instance Language.ECMAScript3.PrettyPrint.Pretty Language.ECMAScript3.Syntax.InfixOp instance Language.ECMAScript3.PrettyPrint.Pretty Language.ECMAScript3.Syntax.AssignOp instance Language.ECMAScript3.PrettyPrint.Pretty Language.ECMAScript3.Syntax.PrefixOp instance Language.ECMAScript3.PrettyPrint.Pretty (Language.ECMAScript3.Syntax.Prop a) instance Language.ECMAScript3.PrettyPrint.Pretty (Language.ECMAScript3.Syntax.Id a) -- | Simple textual diffing of JavaScript programs for inspecting test -- failures module Language.ECMAScript3.SourceDiff jsDiff :: JavaScript a -> JavaScript a -> String -- | A lexical environment analysis of ECMAScript programs -- | Deprecated: Use LexicalEnvironment from package -- 'language-ecmascript-analysis' module Language.ECMAScript3.Analysis.Environment env :: Map String SourcePos -> [Statement SourcePos] -> (EnvTree, Map String SourcePos) localVars :: [Statement SourcePos] -> [(String, SourcePos)] -- | The statically-determinate lexical structure of a JavaScript program. data EnvTree EnvTree :: (Map String SourcePos) -> [EnvTree] -> EnvTree -- | A few helpers to work with the AST annotations module Language.ECMAScript3.Syntax.Annotations -- | Removes annotations from a tree removeAnnotations :: Traversable t => t a -> t () -- | Changes all the labels in the tree to another one, given by a -- function. reannotate :: Traversable t => (a -> b) -> t a -> t b -- | add an extra field to the AST labels (the label would look like -- (a, b) ) addExtraAnnotationField :: Traversable t => b -> t a -> t (a, b) -- | remove an extra field removeExtraAnnotationField :: Traversable t => t (a, b) -> t a -- | Assigns unique numeric (Int) ids to each node in the AST. Returns a -- pair: the tree annotated with UID's and the last ID that was assigned. assignUniqueIds :: Traversable t => Int -> t a -> (t (a, Int), Int) -- | Things that have annotations -- for example, nodes in a syntax tree class HasAnnotation a -- | Returns the annotation of the root of the tree getAnnotation :: HasAnnotation a => a b -> b -- | Sets the annotation of the root of the tree setAnnotation :: HasAnnotation a => b -> a b -> a b -- | Modify the annotation of the root node of the syntax tree withAnnotation :: (HasAnnotation a) => (b -> b) -> a b -> a b instance Language.ECMAScript3.Syntax.Annotations.HasAnnotation Language.ECMAScript3.Syntax.Expression instance Language.ECMAScript3.Syntax.Annotations.HasAnnotation Language.ECMAScript3.Syntax.Statement instance Language.ECMAScript3.Syntax.Annotations.HasAnnotation Language.ECMAScript3.Syntax.LValue instance Language.ECMAScript3.Syntax.Annotations.HasAnnotation Language.ECMAScript3.Syntax.VarDecl instance Language.ECMAScript3.Syntax.Annotations.HasAnnotation Language.ECMAScript3.Syntax.Prop instance Language.ECMAScript3.Syntax.Annotations.HasAnnotation Language.ECMAScript3.Syntax.CaseClause instance Language.ECMAScript3.Syntax.Annotations.HasAnnotation Language.ECMAScript3.Syntax.CatchClause instance Language.ECMAScript3.Syntax.Annotations.HasAnnotation Language.ECMAScript3.Syntax.Id -- | Parser for ECMAScript 3. module Language.ECMAScript3.Parser -- | Parse from a stream given a parser, same as parse in Parsec. We -- can use this to parse expressions or statements alone, not just whole -- programs. parse :: Stream s Identity Char => Parser s a -> SourceName -> s -> Either ParseError a -- | The parser type, parametrised by the stream type s and the -- return value a type Parser s a = ParsecT s ParserState Identity a -- | A parser that parses ECMAScript expressions expression :: Stream s Identity Char => Parser s (Expression SourcePos) -- | The parser that parses a single ECMAScript statement statement :: Stream s Identity Char => Parser s (Statement SourcePos) -- | A parser that parses an ECMAScript program. program :: Stream s Identity Char => Parser s (JavaScript SourcePos) -- | A convenience function that takes a String and tries to parse -- it as an ECMAScript program: -- --
--   parseFromString = parse program ""
--   
parseFromString :: String -> Either ParseError (JavaScript SourcePos) -- | A convenience function that takes a filename and tries to parse the -- file contents an ECMAScript program, it fails with an error message if -- it can't. parseFromFile :: (Error e, MonadIO m, MonadError e m) => String -> m (JavaScript SourcePos) -- | Parse a JavaScript program from a string -- | Deprecated: Use parseFromString instead parseScriptFromString :: String -> String -> Either ParseError (JavaScript SourcePos) -- | Read a JavaScript program from file an parse it into a list of -- statements -- | Deprecated: Use parseFromFile instead parseJavaScriptFromFile :: MonadIO m => String -> m [Statement SourcePos] -- | Deprecated: Use program instead parseScript :: Stream s Identity Char => Parser s (JavaScript SourcePos) -- | Deprecated: Use expression instead parseExpression :: Stream s Identity Char => ExpressionParser s -- | Parse a JavaScript source string into a list of statements -- | Deprecated: Use parseFromString instead parseString :: String -> [Statement SourcePos] -- | Deprecated: These type aliases will be hidden in the next -- version type ParsedStatement = Statement SourcePos -- | Deprecated: These type aliases will be hidden in the next -- version type ParsedExpression = Expression SourcePos -- | Deprecated: These parsers will be hidden in the next version parseSimpleExpr' :: Stream s Identity Char => ExpressionParser s -- | Deprecated: These parsers will be hidden in the next version parseBlockStmt :: Stream s Identity Char => StatementParser s -- | Deprecated: Use statement instead parseStatement :: Stream s Identity Char => StatementParser s -- | Deprecated: These type aliases will be hidden in the next -- version type StatementParser s = Parser s ParsedStatement -- | Deprecated: These type aliases will be hidden in the next -- version type ExpressionParser s = Parser s ParsedExpression -- | Deprecated: Use expression instead assignExpr :: Stream s Identity Char => ExpressionParser s -- | Deprecated: These parsers will be hidden in the next version parseObjectLit :: Stream s Identity Char => ExpressionParser s -- | Re-exports commonly used modules. module Language.ECMAScript3 -- | DEPRECATED: Use prettyPrint instead! Renders a list of -- statements as a String -- | Deprecated: These interfaces are outdated and would be -- removed/hidden in version 1.0. Use the Pretty class instead. renderStatements :: [Statement a] -> String -- | DEPRECATED: Use prettyPrint instead! Renders a list of -- statements as a String -- | Deprecated: These interfaces are outdated and would be -- removed/hidden in version 1.0. Use the Pretty class instead. renderExpression :: Expression a -> String -- | Label-set analysis which annotates all the statements in the script -- with their label sets according to ECMAScript specification, section -- 12.12. The result of this analysis are useful for building -- control-flow graphs. -- | Deprecated: Use LabelSet from package -- 'language-ecmascript-analysis' module Language.ECMAScript3.Analysis.LabelSets -- | Annotates statements with their label sets; example use: -- --
--   >>> let jsa = reannotate (\a -> (a, Set.empty))
--   
--   >>> in  annotateLabelSets jsa snd (\labs (a, ls) -> (a, labs `Set.union` ls))
--   
annotateLabelSets :: Data a => (a -> Set Label) -> (Set Label -> a -> a) -> JavaScript a -> JavaScript a -- | Labels are either strings (identifiers) or empty (see 12.12 of -- the spec) data Label Label :: String -> Label EmptyLabel :: Label instance Data.Data.Data Language.ECMAScript3.Analysis.LabelSets.Label instance GHC.Show.Show Language.ECMAScript3.Analysis.LabelSets.Label instance GHC.Classes.Eq Language.ECMAScript3.Analysis.LabelSets.Label instance GHC.Classes.Ord Language.ECMAScript3.Analysis.LabelSets.Label -- | QuickCheck $Arbitrary$ instances for ECMAScript 3 abstract syntax. module Language.ECMAScript3.Syntax.Arbitrary cshrink :: Arbitrary a => [a] -> [a] emptyStmtShrink :: Arbitrary a => a -> [Statement a] type LabelSubst = Map (Id ()) (Id ()) emptyConstantPool :: () => Map k a -- | A class of AST elements that need fixup after generation class Fixable a fixUp :: Fixable a => a -> Gen a fixLValue :: LValue a -> LValue a fixUpFunExpr :: (Data a) => Expression a -> Gen (Expression a) fixUpListExpr :: (Data a) => Expression a -> Gen (Expression a) fixUpFunStmt :: (Data a) => Statement a -> Gen (Statement a) identifierFixup :: Id a -> Id a -- | Renames empty identifiers, as well as identifiers that are keywords or -- future reserved words by prepending a '_' to them. Also substitutes -- illegal characters with a "_" as well. identifierNameFixup :: String -> String -- | Fixes an incorrect nesting of break/continue, making the program abide -- by the ECMAScript spec (page 92): any continue without a label should -- be nested within an iteration stmt, any continue with a label should -- be nested in a labeled statement (not necessarily with the same -- label); any break statement without a label should be nested in an -- iteration or switch stmt, any break statement with a label should be -- nested in a labeled statement (not necessarily with the same label). -- This is done by either assigning a label (from the set of labels in -- current scope) to a break/continue statement that doesn't have one (or -- has a label that's not present in the current scope). Additionally, it -- removes nested labelled statements with duplicate labels (also a -- requirement imposed by the spec). fixBreakContinue :: (Data a) => [Statement a] -> Gen [Statement a] -- | choose n elements from a list randomly rChooseElem :: [a] -> Int -> Gen [a] -- | Selects a random element of the list selectRandomElement :: [a] -> Gen a isSwitchStmt :: Statement a -> Bool instance (Test.Feat.Class.Enumerable a, Test.QuickCheck.Arbitrary.Arbitrary a) => Test.QuickCheck.Arbitrary.Arbitrary (Language.ECMAScript3.Syntax.Id a) instance (Test.Feat.Class.Enumerable a, Test.QuickCheck.Arbitrary.Arbitrary a, Data.Data.Data a) => Test.QuickCheck.Arbitrary.Arbitrary (Language.ECMAScript3.Syntax.Expression a) instance (Test.Feat.Class.Enumerable a, Test.QuickCheck.Arbitrary.Arbitrary a, Data.Data.Data a) => Test.QuickCheck.Arbitrary.Arbitrary (Language.ECMAScript3.Syntax.ForInInit a) instance (Test.Feat.Class.Enumerable a, Test.QuickCheck.Arbitrary.Arbitrary a, Data.Data.Data a) => Test.QuickCheck.Arbitrary.Arbitrary (Language.ECMAScript3.Syntax.ForInit a) instance (Test.Feat.Class.Enumerable a, Test.QuickCheck.Arbitrary.Arbitrary a, Data.Data.Data a) => Test.QuickCheck.Arbitrary.Arbitrary (Language.ECMAScript3.Syntax.CatchClause a) instance (Test.Feat.Class.Enumerable a, Test.QuickCheck.Arbitrary.Arbitrary a, Data.Data.Data a) => Test.QuickCheck.Arbitrary.Arbitrary (Language.ECMAScript3.Syntax.VarDecl a) instance (Test.Feat.Class.Enumerable a, Test.QuickCheck.Arbitrary.Arbitrary a, Data.Data.Data a) => Test.QuickCheck.Arbitrary.Arbitrary (Language.ECMAScript3.Syntax.Statement a) instance (Data.Data.Data a, Test.QuickCheck.Arbitrary.Arbitrary a, Test.Feat.Class.Enumerable a) => Test.QuickCheck.Arbitrary.Arbitrary (Language.ECMAScript3.Syntax.JavaScript a) instance Data.Data.Data a => Language.ECMAScript3.Syntax.Arbitrary.Fixable (Language.ECMAScript3.Syntax.JavaScript a) instance Data.Data.Data a => Language.ECMAScript3.Syntax.Arbitrary.Fixable (Language.ECMAScript3.Syntax.Expression a) instance Data.Data.Data a => Language.ECMAScript3.Syntax.Arbitrary.Fixable (Language.ECMAScript3.Syntax.Statement a) instance Data.Data.Data a => Language.ECMAScript3.Syntax.Arbitrary.Fixable (Language.ECMAScript3.Syntax.CaseClause a) instance Data.Data.Data a => Language.ECMAScript3.Syntax.Arbitrary.Fixable (Language.ECMAScript3.Syntax.CatchClause a) instance Data.Data.Data a => Language.ECMAScript3.Syntax.Arbitrary.Fixable (Language.ECMAScript3.Syntax.ForInit a) instance Data.Data.Data a => Language.ECMAScript3.Syntax.Arbitrary.Fixable (Language.ECMAScript3.Syntax.ForInInit a) instance Data.Data.Data a => Language.ECMAScript3.Syntax.Arbitrary.Fixable (Language.ECMAScript3.Syntax.VarDecl a) instance Language.ECMAScript3.Syntax.Arbitrary.Fixable (Language.ECMAScript3.Syntax.Id a) instance Data.Data.Data a => Language.ECMAScript3.Syntax.Arbitrary.Fixable (Language.ECMAScript3.Syntax.Prop a) instance Data.Data.Data a => Language.ECMAScript3.Syntax.Arbitrary.Fixable (Language.ECMAScript3.Syntax.LValue a) instance Test.Feat.Class.Enumerable a => Test.Feat.Class.Enumerable (Language.ECMAScript3.Syntax.JavaScript a) instance Test.QuickCheck.Arbitrary.Arbitrary Language.ECMAScript3.Syntax.AssignOp instance Test.QuickCheck.Arbitrary.Arbitrary Language.ECMAScript3.Syntax.InfixOp instance Test.QuickCheck.Arbitrary.Arbitrary Language.ECMAScript3.Syntax.UnaryAssignOp instance Test.QuickCheck.Arbitrary.Arbitrary Language.ECMAScript3.Syntax.PrefixOp instance (Test.Feat.Class.Enumerable a, Test.QuickCheck.Arbitrary.Arbitrary a, Data.Data.Data a) => Test.QuickCheck.Arbitrary.Arbitrary (Language.ECMAScript3.Syntax.CaseClause a) instance (Test.Feat.Class.Enumerable a, Test.QuickCheck.Arbitrary.Arbitrary a) => Test.QuickCheck.Arbitrary.Arbitrary (Language.ECMAScript3.Syntax.Prop a) instance (Data.Data.Data a, Test.Feat.Class.Enumerable a, Test.QuickCheck.Arbitrary.Arbitrary a) => Test.QuickCheck.Arbitrary.Arbitrary (Language.ECMAScript3.Syntax.LValue a) instance Test.Feat.Class.Enumerable a => Test.Feat.Class.Enumerable (Language.ECMAScript3.Syntax.Statement a) instance Test.Feat.Class.Enumerable a => Test.Feat.Class.Enumerable (Language.ECMAScript3.Syntax.Expression a) instance Test.Feat.Class.Enumerable a => Test.Feat.Class.Enumerable (Language.ECMAScript3.Syntax.VarDecl a) instance Test.Feat.Class.Enumerable a => Test.Feat.Class.Enumerable (Language.ECMAScript3.Syntax.ForInInit a) instance Test.Feat.Class.Enumerable a => Test.Feat.Class.Enumerable (Language.ECMAScript3.Syntax.ForInit a) instance Test.Feat.Class.Enumerable a => Test.Feat.Class.Enumerable (Language.ECMAScript3.Syntax.LValue a) instance Test.Feat.Class.Enumerable a => Test.Feat.Class.Enumerable (Language.ECMAScript3.Syntax.Prop a) instance Test.Feat.Class.Enumerable a => Test.Feat.Class.Enumerable (Language.ECMAScript3.Syntax.CatchClause a) instance Test.Feat.Class.Enumerable a => Test.Feat.Class.Enumerable (Language.ECMAScript3.Syntax.CaseClause a) instance Test.Feat.Class.Enumerable a => Test.Feat.Class.Enumerable (Language.ECMAScript3.Syntax.Id a) instance Test.Feat.Class.Enumerable Language.ECMAScript3.Syntax.PrefixOp instance Test.Feat.Class.Enumerable Language.ECMAScript3.Syntax.UnaryAssignOp instance Test.Feat.Class.Enumerable Language.ECMAScript3.Syntax.InfixOp instance Test.Feat.Class.Enumerable Language.ECMAScript3.Syntax.AssignOp -- | Utility combinator functions for simplifying writing programmatic -- generation of ECMAScript code. Recommended to use together with the -- -XOverloadedStrings GHC extension. module Language.ECMAScript3.Syntax.CodeGen script :: Default a => [Statement a] -> JavaScript a ident :: Default a => String -> Id a propId :: Default a => Id a -> Prop a propS :: Default a => String -> Prop a propN :: Default a => Integer -> Prop a lvar :: Default a => String -> LValue a ldot :: Default a => Expression a -> String -> LValue a lbrack :: Default a => Expression a -> Expression a -> LValue a string :: Default a => String -> Expression a regexp :: Default a => String -> Bool -> Bool -> Expression a number :: Default a => Double -> Expression a bool :: Default a => Bool -> Expression a int :: Default a => Int -> Expression a null_ :: Default a => Expression a array :: Default a => [Expression a] -> Expression a object :: Default a => [(Prop a, Expression a)] -> Expression a this :: Default a => Expression a var :: Default a => Id a -> Expression a dot :: Default a => Expression a -> Id a -> Expression a brack :: Default a => Expression a -> Expression a -> Expression a new :: Default a => Expression a -> [Expression a] -> Expression a prefix :: Default a => PrefixOp -> Expression a -> Expression a lnot :: Default a => Expression a -> Expression a bnot :: Default a => Expression a -> Expression a plus :: Default a => Expression a -> Expression a minus :: Default a => Expression a -> Expression a typeof :: Default a => Expression a -> Expression a void :: Default a => Expression a -> Expression a delete :: Default a => Expression a -> Expression a uassign :: Default a => UnaryAssignOp -> LValue a -> Expression a preinc :: Default a => LValue a -> Expression a predec :: Default a => LValue a -> Expression a postinc :: Default a => LValue a -> Expression a postdec :: Default a => LValue a -> Expression a infixe :: Default a => InfixOp -> Expression a -> Expression a -> Expression a lt :: Default a => Expression a -> Expression a -> Expression a le :: Default a => Expression a -> Expression a -> Expression a gt :: Default a => Expression a -> Expression a -> Expression a ge :: Default a => Expression a -> Expression a -> Expression a in_ :: Default a => Expression a -> Expression a -> Expression a instanceof :: Default a => Expression a -> Expression a -> Expression a eq :: Default a => Expression a -> Expression a -> Expression a neq :: Default a => Expression a -> Expression a -> Expression a steq :: Default a => Expression a -> Expression a -> Expression a stneq :: Default a => Expression a -> Expression a -> Expression a land :: Default a => Expression a -> Expression a -> Expression a lor :: Default a => Expression a -> Expression a -> Expression a mul :: Default a => Expression a -> Expression a -> Expression a div :: Default a => Expression a -> Expression a -> Expression a mod :: Default a => Expression a -> Expression a -> Expression a sub :: Default a => Expression a -> Expression a -> Expression a lshift :: Default a => Expression a -> Expression a -> Expression a srshift :: Default a => Expression a -> Expression a -> Expression a zrshift :: Default a => Expression a -> Expression a -> Expression a band :: Default a => Expression a -> Expression a -> Expression a bor :: Default a => Expression a -> Expression a -> Expression a xor :: Default a => Expression a -> Expression a -> Expression a add :: Default a => Expression a -> Expression a -> Expression a cond :: Default a => Expression a -> Expression a -> Expression a -> Expression a assignop :: Default a => AssignOp -> LValue a -> Expression a -> Expression a assign :: Default a => LValue a -> Expression a -> Expression a assignadd :: Default a => LValue a -> Expression a -> Expression a assignsub :: Default a => LValue a -> Expression a -> Expression a assignmul :: Default a => LValue a -> Expression a -> Expression a assigndiv :: Default a => LValue a -> Expression a -> Expression a assignmod :: Default a => LValue a -> Expression a -> Expression a assignlshift :: Default a => LValue a -> Expression a -> Expression a assignsrshift :: Default a => LValue a -> Expression a -> Expression a assignzrshift :: Default a => LValue a -> Expression a -> Expression a assignband :: Default a => LValue a -> Expression a -> Expression a assignxor :: Default a => LValue a -> Expression a -> Expression a assignbor :: Default a => LValue a -> Expression a -> Expression a list :: Default a => [Expression a] -> Expression a call :: Default a => Expression a -> [Expression a] -> Expression a func :: Default a => Id a -> [Id a] -> [Statement a] -> Expression a lambda :: Default a => [Id a] -> [Statement a] -> Expression a casee :: Default a => Expression a -> [Statement a] -> CaseClause a defaultc :: Default a => [Statement a] -> CaseClause a catch :: Default a => Id a -> Statement a -> CatchClause a vardecl :: Default a => Id a -> VarDecl a varinit :: Default a => Id a -> Expression a -> VarDecl a block :: Default a => [Statement a] -> Statement a empty :: Default a => Statement a expr :: Default a => Expression a -> Statement a ifte :: Default a => Expression a -> Statement a -> Statement a -> Statement a ift :: Default a => Expression a -> Statement a -> Statement a switch :: Default a => Expression a -> [CaseClause a] -> Statement a while :: Default a => Expression a -> Statement a -> Statement a dowhile :: Default a => Statement a -> Expression a -> Statement a break :: Default a => Maybe (Id a) -> Statement a continue :: Default a => Maybe (Id a) -> Statement a label :: Default a => Id a -> Statement a -> Statement a forin :: Default a => ForInInit a -> Expression a -> Statement a -> Statement a for :: Default a => ForInit a -> Maybe (Expression a) -> Maybe (Expression a) -> Statement a -> Statement a try :: Default a => Statement a -> Statement a trycatch :: Default a => Statement a -> CatchClause a -> Maybe (Statement a) -> Statement a tryfinally :: Default a => Statement a -> Statement a -> Statement a trycatchfinally :: Default a => Statement a -> CatchClause a -> Statement a -> Statement a throw :: Default a => Expression a -> Statement a returns :: Default a => Expression a -> Statement a ret :: Default a => Statement a with :: Default a => Expression a -> Statement a -> Statement a vardecls :: Default a => [VarDecl a] -> Statement a function :: Default a => Id a -> [Id a] -> [Statement a] -> Statement a -- | Convert an identifier to a String literal id2string :: Id a -> Expression a -- | Helper function to convert LValues to expressions lv2e :: LValue a -> Expression a -- | Convert an expression to an l-value. May fail with an error e2lv :: Expression a -> LValue a forInInit2lv :: ForInInit a -> LValue a instance Data.Default.Class.Default a => Data.String.IsString (Language.ECMAScript3.Syntax.Id a) instance Data.Default.Class.Default a => Data.String.IsString (Language.ECMAScript3.Syntax.Prop a) instance Data.Default.Class.Default a => Data.String.IsString (Language.ECMAScript3.Syntax.LValue a) instance Data.Default.Class.Default a => Data.String.IsString (Language.ECMAScript3.Syntax.Expression a) -- | Experimental and very simple quasi-quotation of ECMAScript in Haskell. -- Doesn't support anti-quotation as of now. module Language.ECMAScript3.Syntax.QuasiQuote js :: QuasiQuoter jsexpr :: QuasiQuoter jsstmt :: QuasiQuoter