-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/

-- | Parser for JavaScript
--   
--   Parses Javascript into an Abstract Syntax Tree (AST). Initially
--   intended as frontend to hjsmin.
--   
--   Note: Version 0.5.0 breaks compatibility with prior versions, the AST
--   has been reworked to allow round trip processing of JavaScript.
@package language-javascript
@version 0.7.1.0

module Language.JavaScript.Parser.SrcLocation

-- | TokenPosn records the location of a token in the input text.
--   It has three fields: the address (number of characters preceding the
--   token), line number and column of a token within the file. Note: The
--   lexer assumes the usual eight character tab stops.
data TokenPosn
TokenPn :: !Int -> !Int -> !Int -> TokenPosn
tokenPosnEmpty :: TokenPosn
instance GHC.Internal.Data.Data.Data Language.JavaScript.Parser.SrcLocation.TokenPosn
instance GHC.Classes.Eq Language.JavaScript.Parser.SrcLocation.TokenPosn
instance GHC.Internal.Read.Read Language.JavaScript.Parser.SrcLocation.TokenPosn
instance GHC.Internal.Show.Show Language.JavaScript.Parser.SrcLocation.TokenPosn

module Language.JavaScript.Parser.Lexer

-- | Lexical tokens. Each may be annotated with any comment occurring
--   between the prior token and this one
data Token

-- | Single line comment.
CommentToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenLiteral] :: Token -> !String
[tokenComment] :: Token -> ![CommentAnnotation]

-- | White space, for preservation.
WsToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenLiteral] :: Token -> !String
[tokenComment] :: Token -> ![CommentAnnotation]

-- | Identifier.
IdentifierToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenLiteral] :: Token -> !String
[tokenComment] :: Token -> ![CommentAnnotation]

-- | Literal: Decimal
DecimalToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenLiteral] :: Token -> !String
[tokenComment] :: Token -> ![CommentAnnotation]

-- | Literal: Hexadecimal Integer
HexIntegerToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenLiteral] :: Token -> !String
[tokenComment] :: Token -> ![CommentAnnotation]

-- | Literal: Octal Integer
OctalToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenLiteral] :: Token -> !String
[tokenComment] :: Token -> ![CommentAnnotation]

-- | Literal: string, delimited by either single or double quotes
StringToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenLiteral] :: Token -> !String
[tokenComment] :: Token -> ![CommentAnnotation]

-- | Literal: Regular Expression
RegExToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenLiteral] :: Token -> !String
[tokenComment] :: Token -> ![CommentAnnotation]
AsyncToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenLiteral] :: Token -> !String
[tokenComment] :: Token -> ![CommentAnnotation]
AwaitToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenLiteral] :: Token -> !String
[tokenComment] :: Token -> ![CommentAnnotation]
BreakToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenLiteral] :: Token -> !String
[tokenComment] :: Token -> ![CommentAnnotation]
CaseToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenLiteral] :: Token -> !String
[tokenComment] :: Token -> ![CommentAnnotation]
CatchToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenLiteral] :: Token -> !String
[tokenComment] :: Token -> ![CommentAnnotation]
ClassToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenLiteral] :: Token -> !String
[tokenComment] :: Token -> ![CommentAnnotation]
ConstToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenLiteral] :: Token -> !String
[tokenComment] :: Token -> ![CommentAnnotation]
LetToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenLiteral] :: Token -> !String
[tokenComment] :: Token -> ![CommentAnnotation]
ContinueToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenLiteral] :: Token -> !String
[tokenComment] :: Token -> ![CommentAnnotation]
DebuggerToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenLiteral] :: Token -> !String
[tokenComment] :: Token -> ![CommentAnnotation]
DefaultToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenLiteral] :: Token -> !String
[tokenComment] :: Token -> ![CommentAnnotation]
DeleteToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenLiteral] :: Token -> !String
[tokenComment] :: Token -> ![CommentAnnotation]
DoToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenLiteral] :: Token -> !String
[tokenComment] :: Token -> ![CommentAnnotation]
ElseToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenLiteral] :: Token -> !String
[tokenComment] :: Token -> ![CommentAnnotation]
EnumToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenLiteral] :: Token -> !String
[tokenComment] :: Token -> ![CommentAnnotation]
ExtendsToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenLiteral] :: Token -> !String
[tokenComment] :: Token -> ![CommentAnnotation]
FalseToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenLiteral] :: Token -> !String
[tokenComment] :: Token -> ![CommentAnnotation]
FinallyToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenLiteral] :: Token -> !String
[tokenComment] :: Token -> ![CommentAnnotation]
ForToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenLiteral] :: Token -> !String
[tokenComment] :: Token -> ![CommentAnnotation]
FunctionToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenLiteral] :: Token -> !String
[tokenComment] :: Token -> ![CommentAnnotation]
FromToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenLiteral] :: Token -> !String
[tokenComment] :: Token -> ![CommentAnnotation]
IfToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenLiteral] :: Token -> !String
[tokenComment] :: Token -> ![CommentAnnotation]
InToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenLiteral] :: Token -> !String
[tokenComment] :: Token -> ![CommentAnnotation]
InstanceofToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenLiteral] :: Token -> !String
[tokenComment] :: Token -> ![CommentAnnotation]
NewToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenLiteral] :: Token -> !String
[tokenComment] :: Token -> ![CommentAnnotation]
NullToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenLiteral] :: Token -> !String
[tokenComment] :: Token -> ![CommentAnnotation]
OfToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenLiteral] :: Token -> !String
[tokenComment] :: Token -> ![CommentAnnotation]
ReturnToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenLiteral] :: Token -> !String
[tokenComment] :: Token -> ![CommentAnnotation]
StaticToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenLiteral] :: Token -> !String
[tokenComment] :: Token -> ![CommentAnnotation]
SuperToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenLiteral] :: Token -> !String
[tokenComment] :: Token -> ![CommentAnnotation]
SwitchToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenLiteral] :: Token -> !String
[tokenComment] :: Token -> ![CommentAnnotation]
ThisToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenLiteral] :: Token -> !String
[tokenComment] :: Token -> ![CommentAnnotation]
ThrowToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenLiteral] :: Token -> !String
[tokenComment] :: Token -> ![CommentAnnotation]
TrueToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenLiteral] :: Token -> !String
[tokenComment] :: Token -> ![CommentAnnotation]
TryToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenLiteral] :: Token -> !String
[tokenComment] :: Token -> ![CommentAnnotation]
TypeofToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenLiteral] :: Token -> !String
[tokenComment] :: Token -> ![CommentAnnotation]
VarToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenLiteral] :: Token -> !String
[tokenComment] :: Token -> ![CommentAnnotation]
VoidToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenLiteral] :: Token -> !String
[tokenComment] :: Token -> ![CommentAnnotation]
WhileToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenLiteral] :: Token -> !String
[tokenComment] :: Token -> ![CommentAnnotation]
YieldToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenLiteral] :: Token -> !String
[tokenComment] :: Token -> ![CommentAnnotation]
ImportToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenLiteral] :: Token -> !String
[tokenComment] :: Token -> ![CommentAnnotation]
WithToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenLiteral] :: Token -> !String
[tokenComment] :: Token -> ![CommentAnnotation]
ExportToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenLiteral] :: Token -> !String
[tokenComment] :: Token -> ![CommentAnnotation]
FutureToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenLiteral] :: Token -> !String
[tokenComment] :: Token -> ![CommentAnnotation]
GetToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenLiteral] :: Token -> !String
[tokenComment] :: Token -> ![CommentAnnotation]
SetToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenLiteral] :: Token -> !String
[tokenComment] :: Token -> ![CommentAnnotation]
AutoSemiToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenLiteral] :: Token -> !String
[tokenComment] :: Token -> ![CommentAnnotation]
SemiColonToken :: !TokenPosn -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenComment] :: Token -> ![CommentAnnotation]
CommaToken :: !TokenPosn -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenComment] :: Token -> ![CommentAnnotation]
HookToken :: !TokenPosn -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenComment] :: Token -> ![CommentAnnotation]
ColonToken :: !TokenPosn -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenComment] :: Token -> ![CommentAnnotation]
OrToken :: !TokenPosn -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenComment] :: Token -> ![CommentAnnotation]
AndToken :: !TokenPosn -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenComment] :: Token -> ![CommentAnnotation]
BitwiseOrToken :: !TokenPosn -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenComment] :: Token -> ![CommentAnnotation]
BitwiseXorToken :: !TokenPosn -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenComment] :: Token -> ![CommentAnnotation]
BitwiseAndToken :: !TokenPosn -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenComment] :: Token -> ![CommentAnnotation]
StrictEqToken :: !TokenPosn -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenComment] :: Token -> ![CommentAnnotation]
EqToken :: !TokenPosn -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenComment] :: Token -> ![CommentAnnotation]
TimesAssignToken :: !TokenPosn -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenComment] :: Token -> ![CommentAnnotation]
DivideAssignToken :: !TokenPosn -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenComment] :: Token -> ![CommentAnnotation]
ModAssignToken :: !TokenPosn -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenComment] :: Token -> ![CommentAnnotation]
PlusAssignToken :: !TokenPosn -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenComment] :: Token -> ![CommentAnnotation]
MinusAssignToken :: !TokenPosn -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenComment] :: Token -> ![CommentAnnotation]
LshAssignToken :: !TokenPosn -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenComment] :: Token -> ![CommentAnnotation]
RshAssignToken :: !TokenPosn -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenComment] :: Token -> ![CommentAnnotation]
UrshAssignToken :: !TokenPosn -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenComment] :: Token -> ![CommentAnnotation]
AndAssignToken :: !TokenPosn -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenComment] :: Token -> ![CommentAnnotation]
XorAssignToken :: !TokenPosn -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenComment] :: Token -> ![CommentAnnotation]
OrAssignToken :: !TokenPosn -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenComment] :: Token -> ![CommentAnnotation]
SimpleAssignToken :: !TokenPosn -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenComment] :: Token -> ![CommentAnnotation]
StrictNeToken :: !TokenPosn -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenComment] :: Token -> ![CommentAnnotation]
NeToken :: !TokenPosn -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenComment] :: Token -> ![CommentAnnotation]
LshToken :: !TokenPosn -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenComment] :: Token -> ![CommentAnnotation]
LeToken :: !TokenPosn -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenComment] :: Token -> ![CommentAnnotation]
LtToken :: !TokenPosn -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenComment] :: Token -> ![CommentAnnotation]
UrshToken :: !TokenPosn -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenComment] :: Token -> ![CommentAnnotation]
RshToken :: !TokenPosn -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenComment] :: Token -> ![CommentAnnotation]
GeToken :: !TokenPosn -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenComment] :: Token -> ![CommentAnnotation]
GtToken :: !TokenPosn -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenComment] :: Token -> ![CommentAnnotation]
IncrementToken :: !TokenPosn -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenComment] :: Token -> ![CommentAnnotation]
DecrementToken :: !TokenPosn -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenComment] :: Token -> ![CommentAnnotation]
PlusToken :: !TokenPosn -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenComment] :: Token -> ![CommentAnnotation]
MinusToken :: !TokenPosn -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenComment] :: Token -> ![CommentAnnotation]
MulToken :: !TokenPosn -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenComment] :: Token -> ![CommentAnnotation]
DivToken :: !TokenPosn -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenComment] :: Token -> ![CommentAnnotation]
ModToken :: !TokenPosn -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenComment] :: Token -> ![CommentAnnotation]
NotToken :: !TokenPosn -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenComment] :: Token -> ![CommentAnnotation]
BitwiseNotToken :: !TokenPosn -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenComment] :: Token -> ![CommentAnnotation]
ArrowToken :: !TokenPosn -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenComment] :: Token -> ![CommentAnnotation]
SpreadToken :: !TokenPosn -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenComment] :: Token -> ![CommentAnnotation]
DotToken :: !TokenPosn -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenComment] :: Token -> ![CommentAnnotation]
LeftBracketToken :: !TokenPosn -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenComment] :: Token -> ![CommentAnnotation]
RightBracketToken :: !TokenPosn -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenComment] :: Token -> ![CommentAnnotation]
LeftCurlyToken :: !TokenPosn -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenComment] :: Token -> ![CommentAnnotation]
RightCurlyToken :: !TokenPosn -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenComment] :: Token -> ![CommentAnnotation]
LeftParenToken :: !TokenPosn -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenComment] :: Token -> ![CommentAnnotation]
RightParenToken :: !TokenPosn -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenComment] :: Token -> ![CommentAnnotation]
CondcommentEndToken :: !TokenPosn -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenComment] :: Token -> ![CommentAnnotation]
NoSubstitutionTemplateToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenLiteral] :: Token -> !String
[tokenComment] :: Token -> ![CommentAnnotation]
TemplateHeadToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenLiteral] :: Token -> !String
[tokenComment] :: Token -> ![CommentAnnotation]
TemplateMiddleToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenLiteral] :: Token -> !String
[tokenComment] :: Token -> ![CommentAnnotation]
TemplateTailToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenLiteral] :: Token -> !String
[tokenComment] :: Token -> ![CommentAnnotation]
AsToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenLiteral] :: Token -> !String
[tokenComment] :: Token -> ![CommentAnnotation]

-- | Stuff between last JS and EOF
TailToken :: !TokenPosn -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenComment] :: Token -> ![CommentAnnotation]

-- | End of file
EOFToken :: !TokenPosn -> ![CommentAnnotation] -> Token
[tokenSpan] :: Token -> !TokenPosn
[tokenComment] :: Token -> ![CommentAnnotation]
data Alex a
lexCont :: (Token -> Alex a) -> Alex a
alexError :: String -> Alex a
runAlex :: String -> Alex a -> Either String a
alexTestTokeniser :: String -> Either String [Token]
setInTemplate :: Bool -> Alex ()
instance GHC.Internal.Base.Applicative Language.JavaScript.Parser.Lexer.Alex
instance GHC.Classes.Eq Language.JavaScript.Parser.Lexer.AlexPosn
instance GHC.Internal.Base.Functor Language.JavaScript.Parser.Lexer.Alex
instance GHC.Internal.Base.Monad Language.JavaScript.Parser.Lexer.Alex
instance GHC.Classes.Ord Language.JavaScript.Parser.Lexer.AlexPosn
instance GHC.Internal.Show.Show Language.JavaScript.Parser.Lexer.AlexPosn

module Language.JavaScript.Parser.AST
data JSExpression

-- | Terminals
JSIdentifier :: !JSAnnot -> !String -> JSExpression
JSDecimal :: !JSAnnot -> !String -> JSExpression
JSLiteral :: !JSAnnot -> !String -> JSExpression
JSHexInteger :: !JSAnnot -> !String -> JSExpression
JSOctal :: !JSAnnot -> !String -> JSExpression
JSStringLiteral :: !JSAnnot -> !String -> JSExpression
JSRegEx :: !JSAnnot -> !String -> JSExpression

-- | Non Terminals
JSArrayLiteral :: !JSAnnot -> ![JSArrayElement] -> !JSAnnot -> JSExpression

-- | lhs, assignop, rhs
JSAssignExpression :: !JSExpression -> !JSAssignOp -> !JSExpression -> JSExpression

-- | await, expr
JSAwaitExpression :: !JSAnnot -> !JSExpression -> JSExpression

-- | expr, bl, args, rb
JSCallExpression :: !JSExpression -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> JSExpression

-- | expr, dot, expr
JSCallExpressionDot :: !JSExpression -> !JSAnnot -> !JSExpression -> JSExpression

-- | expr, [, expr, ]
JSCallExpressionSquare :: !JSExpression -> !JSAnnot -> !JSExpression -> !JSAnnot -> JSExpression

-- | class, optional identifier, optional extends clause, lb, body, rb
JSClassExpression :: !JSAnnot -> !JSIdent -> !JSClassHeritage -> !JSAnnot -> ![JSClassElement] -> !JSAnnot -> JSExpression

-- | expression components
JSCommaExpression :: !JSExpression -> !JSAnnot -> !JSExpression -> JSExpression

-- | lhs, op, rhs
JSExpressionBinary :: !JSExpression -> !JSBinOp -> !JSExpression -> JSExpression

-- | lb,expression,rb
JSExpressionParen :: !JSAnnot -> !JSExpression -> !JSAnnot -> JSExpression

-- | expression, operator
JSExpressionPostfix :: !JSExpression -> !JSUnaryOp -> JSExpression

-- | cond, ?, trueval, :, falseval
JSExpressionTernary :: !JSExpression -> !JSAnnot -> !JSExpression -> !JSAnnot -> !JSExpression -> JSExpression

-- | parameter list,arrow,block`
JSArrowExpression :: !JSArrowParameterList -> !JSAnnot -> !JSStatement -> JSExpression

-- | fn,name,lb, parameter list,rb,block`
JSFunctionExpression :: !JSAnnot -> !JSIdent -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSBlock -> JSExpression

-- | fn,*,name,lb, parameter list,rb,block`
JSGeneratorExpression :: !JSAnnot -> !JSAnnot -> !JSIdent -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSBlock -> JSExpression

-- | firstpart, dot, name
JSMemberDot :: !JSExpression -> !JSAnnot -> !JSExpression -> JSExpression
JSMemberExpression :: !JSExpression -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> JSExpression

-- | new, name, lb, args, rb
JSMemberNew :: !JSAnnot -> !JSExpression -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> JSExpression

-- | firstpart, lb, expr, rb
JSMemberSquare :: !JSExpression -> !JSAnnot -> !JSExpression -> !JSAnnot -> JSExpression

-- | new, expr
JSNewExpression :: !JSAnnot -> !JSExpression -> JSExpression

-- | lbrace contents rbrace
JSObjectLiteral :: !JSAnnot -> !JSObjectPropertyList -> !JSAnnot -> JSExpression
JSSpreadExpression :: !JSAnnot -> !JSExpression -> JSExpression

-- | optional tag, lquot, head, parts
JSTemplateLiteral :: !Maybe JSExpression -> !JSAnnot -> !String -> ![JSTemplatePart] -> JSExpression
JSUnaryExpression :: !JSUnaryOp -> !JSExpression -> JSExpression

-- | identifier, initializer
JSVarInitExpression :: !JSExpression -> !JSVarInitializer -> JSExpression

-- | yield, optional expr
JSYieldExpression :: !JSAnnot -> !Maybe JSExpression -> JSExpression

-- | yield, *, expr
JSYieldFromExpression :: !JSAnnot -> !JSAnnot -> !JSExpression -> JSExpression
data JSAnnot

-- | Annotation: position and comment/whitespace information
JSAnnot :: !TokenPosn -> ![CommentAnnotation] -> JSAnnot

-- | A single space character
JSAnnotSpace :: JSAnnot

-- | No annotation
JSNoAnnot :: JSAnnot
data JSBinOp
JSBinOpAnd :: !JSAnnot -> JSBinOp
JSBinOpBitAnd :: !JSAnnot -> JSBinOp
JSBinOpBitOr :: !JSAnnot -> JSBinOp
JSBinOpBitXor :: !JSAnnot -> JSBinOp
JSBinOpDivide :: !JSAnnot -> JSBinOp
JSBinOpEq :: !JSAnnot -> JSBinOp
JSBinOpGe :: !JSAnnot -> JSBinOp
JSBinOpGt :: !JSAnnot -> JSBinOp
JSBinOpIn :: !JSAnnot -> JSBinOp
JSBinOpInstanceOf :: !JSAnnot -> JSBinOp
JSBinOpLe :: !JSAnnot -> JSBinOp
JSBinOpLsh :: !JSAnnot -> JSBinOp
JSBinOpLt :: !JSAnnot -> JSBinOp
JSBinOpMinus :: !JSAnnot -> JSBinOp
JSBinOpMod :: !JSAnnot -> JSBinOp
JSBinOpNeq :: !JSAnnot -> JSBinOp
JSBinOpOf :: !JSAnnot -> JSBinOp
JSBinOpOr :: !JSAnnot -> JSBinOp
JSBinOpPlus :: !JSAnnot -> JSBinOp
JSBinOpRsh :: !JSAnnot -> JSBinOp
JSBinOpStrictEq :: !JSAnnot -> JSBinOp
JSBinOpStrictNeq :: !JSAnnot -> JSBinOp
JSBinOpTimes :: !JSAnnot -> JSBinOp
JSBinOpUrsh :: !JSAnnot -> JSBinOp
data JSUnaryOp
JSUnaryOpDecr :: !JSAnnot -> JSUnaryOp
JSUnaryOpDelete :: !JSAnnot -> JSUnaryOp
JSUnaryOpIncr :: !JSAnnot -> JSUnaryOp
JSUnaryOpMinus :: !JSAnnot -> JSUnaryOp
JSUnaryOpNot :: !JSAnnot -> JSUnaryOp
JSUnaryOpPlus :: !JSAnnot -> JSUnaryOp
JSUnaryOpTilde :: !JSAnnot -> JSUnaryOp
JSUnaryOpTypeof :: !JSAnnot -> JSUnaryOp
JSUnaryOpVoid :: !JSAnnot -> JSUnaryOp
data JSSemi
JSSemi :: !JSAnnot -> JSSemi
JSSemiAuto :: JSSemi
data JSAssignOp
JSAssign :: !JSAnnot -> JSAssignOp
JSTimesAssign :: !JSAnnot -> JSAssignOp
JSDivideAssign :: !JSAnnot -> JSAssignOp
JSModAssign :: !JSAnnot -> JSAssignOp
JSPlusAssign :: !JSAnnot -> JSAssignOp
JSMinusAssign :: !JSAnnot -> JSAssignOp
JSLshAssign :: !JSAnnot -> JSAssignOp
JSRshAssign :: !JSAnnot -> JSAssignOp
JSUrshAssign :: !JSAnnot -> JSAssignOp
JSBwAndAssign :: !JSAnnot -> JSAssignOp
JSBwXorAssign :: !JSAnnot -> JSAssignOp
JSBwOrAssign :: !JSAnnot -> JSAssignOp
data JSTryCatch

-- | catch,lb,ident,rb,block
JSCatch :: !JSAnnot -> !JSAnnot -> !JSExpression -> !JSAnnot -> !JSBlock -> JSTryCatch

-- | catch,lb,ident,if,expr,rb,block
JSCatchIf :: !JSAnnot -> !JSAnnot -> !JSExpression -> !JSAnnot -> !JSExpression -> !JSAnnot -> !JSBlock -> JSTryCatch
data JSTryFinally

-- | finally,block
JSFinally :: !JSAnnot -> !JSBlock -> JSTryFinally
JSNoFinally :: JSTryFinally
data JSStatement

-- | lbrace, stmts, rbrace, autosemi
JSStatementBlock :: !JSAnnot -> ![JSStatement] -> !JSAnnot -> !JSSemi -> JSStatement

-- | break,optional identifier, autosemi
JSBreak :: !JSAnnot -> !JSIdent -> !JSSemi -> JSStatement

-- | const, decl, autosemi
JSLet :: !JSAnnot -> !JSCommaList JSExpression -> !JSSemi -> JSStatement

-- | class, name, optional extends clause, lb, body, rb, autosemi
JSClass :: !JSAnnot -> !JSIdent -> !JSClassHeritage -> !JSAnnot -> ![JSClassElement] -> !JSAnnot -> !JSSemi -> JSStatement

-- | const, decl, autosemi
JSConstant :: !JSAnnot -> !JSCommaList JSExpression -> !JSSemi -> JSStatement

-- | continue, optional identifier,autosemi
JSContinue :: !JSAnnot -> !JSIdent -> !JSSemi -> JSStatement

-- | do,stmt,while,lb,expr,rb,autosemi
JSDoWhile :: !JSAnnot -> !JSStatement -> !JSAnnot -> !JSAnnot -> !JSExpression -> !JSAnnot -> !JSSemi -> JSStatement

-- | for,lb,expr,semi,expr,semi,expr,rb.stmt
JSFor :: !JSAnnot -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSStatement -> JSStatement

-- | for,lb,expr,in,expr,rb,stmt
JSForIn :: !JSAnnot -> !JSAnnot -> !JSExpression -> !JSBinOp -> !JSExpression -> !JSAnnot -> !JSStatement -> JSStatement

-- | for,lb,var,vardecl,semi,expr,semi,expr,rb,stmt
JSForVar :: !JSAnnot -> !JSAnnot -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSStatement -> JSStatement

-- | for,lb,var,vardecl,in,expr,rb,stmt
JSForVarIn :: !JSAnnot -> !JSAnnot -> !JSAnnot -> !JSExpression -> !JSBinOp -> !JSExpression -> !JSAnnot -> !JSStatement -> JSStatement

-- | for,lb,var,vardecl,semi,expr,semi,expr,rb,stmt
JSForLet :: !JSAnnot -> !JSAnnot -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSStatement -> JSStatement

-- | for,lb,var,vardecl,in,expr,rb,stmt
JSForLetIn :: !JSAnnot -> !JSAnnot -> !JSAnnot -> !JSExpression -> !JSBinOp -> !JSExpression -> !JSAnnot -> !JSStatement -> JSStatement

-- | for,lb,var,vardecl,in,expr,rb,stmt
JSForLetOf :: !JSAnnot -> !JSAnnot -> !JSAnnot -> !JSExpression -> !JSBinOp -> !JSExpression -> !JSAnnot -> !JSStatement -> JSStatement

-- | for,lb,var,vardecl,semi,expr,semi,expr,rb,stmt
JSForConst :: !JSAnnot -> !JSAnnot -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSStatement -> JSStatement

-- | for,lb,var,vardecl,in,expr,rb,stmt
JSForConstIn :: !JSAnnot -> !JSAnnot -> !JSAnnot -> !JSExpression -> !JSBinOp -> !JSExpression -> !JSAnnot -> !JSStatement -> JSStatement

-- | for,lb,var,vardecl,in,expr,rb,stmt
JSForConstOf :: !JSAnnot -> !JSAnnot -> !JSAnnot -> !JSExpression -> !JSBinOp -> !JSExpression -> !JSAnnot -> !JSStatement -> JSStatement

-- | for,lb,expr,in,expr,rb,stmt
JSForOf :: !JSAnnot -> !JSAnnot -> !JSExpression -> !JSBinOp -> !JSExpression -> !JSAnnot -> !JSStatement -> JSStatement

-- | for,lb,var,vardecl,in,expr,rb,stmt
JSForVarOf :: !JSAnnot -> !JSAnnot -> !JSAnnot -> !JSExpression -> !JSBinOp -> !JSExpression -> !JSAnnot -> !JSStatement -> JSStatement

-- | fn,name, lb,parameter list,rb,block,autosemi
JSAsyncFunction :: !JSAnnot -> !JSAnnot -> !JSIdent -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSBlock -> !JSSemi -> JSStatement

-- | fn,name, lb,parameter list,rb,block,autosemi
JSFunction :: !JSAnnot -> !JSIdent -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSBlock -> !JSSemi -> JSStatement

-- | fn,*,name, lb,parameter list,rb,block,autosemi
JSGenerator :: !JSAnnot -> !JSAnnot -> !JSIdent -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSBlock -> !JSSemi -> JSStatement

-- | if,(,expr,),stmt
JSIf :: !JSAnnot -> !JSAnnot -> !JSExpression -> !JSAnnot -> !JSStatement -> JSStatement

-- | if,(,expr,),stmt,else,rest
JSIfElse :: !JSAnnot -> !JSAnnot -> !JSExpression -> !JSAnnot -> !JSStatement -> !JSAnnot -> !JSStatement -> JSStatement

-- | identifier,colon,stmt
JSLabelled :: !JSIdent -> !JSAnnot -> !JSStatement -> JSStatement
JSEmptyStatement :: !JSAnnot -> JSStatement
JSExpressionStatement :: !JSExpression -> !JSSemi -> JSStatement

-- | lhs, assignop, rhs, autosemi
JSAssignStatement :: !JSExpression -> !JSAssignOp -> !JSExpression -> !JSSemi -> JSStatement
JSMethodCall :: !JSExpression -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSSemi -> JSStatement

-- | optional expression,autosemi
JSReturn :: !JSAnnot -> !Maybe JSExpression -> !JSSemi -> JSStatement

-- | switch,lb,expr,rb,caseblock,autosemi
JSSwitch :: !JSAnnot -> !JSAnnot -> !JSExpression -> !JSAnnot -> !JSAnnot -> ![JSSwitchParts] -> !JSAnnot -> !JSSemi -> JSStatement

-- | throw val autosemi
JSThrow :: !JSAnnot -> !JSExpression -> !JSSemi -> JSStatement

-- | try,block,catches,finally
JSTry :: !JSAnnot -> !JSBlock -> ![JSTryCatch] -> !JSTryFinally -> JSStatement

-- | var, decl, autosemi
JSVariable :: !JSAnnot -> !JSCommaList JSExpression -> !JSSemi -> JSStatement

-- | while,lb,expr,rb,stmt
JSWhile :: !JSAnnot -> !JSAnnot -> !JSExpression -> !JSAnnot -> !JSStatement -> JSStatement

-- | with,lb,expr,rb,stmt list
JSWith :: !JSAnnot -> !JSAnnot -> !JSExpression -> !JSAnnot -> !JSStatement -> !JSSemi -> JSStatement
data JSBlock

-- | lbrace, stmts, rbrace
JSBlock :: !JSAnnot -> ![JSStatement] -> !JSAnnot -> JSBlock
data JSSwitchParts

-- | expr,colon,stmtlist
JSCase :: !JSAnnot -> !JSExpression -> !JSAnnot -> ![JSStatement] -> JSSwitchParts

-- | colon,stmtlist
JSDefault :: !JSAnnot -> !JSAnnot -> ![JSStatement] -> JSSwitchParts
data JSAST

-- | source elements, trailing whitespace
JSAstProgram :: ![JSStatement] -> !JSAnnot -> JSAST
JSAstModule :: ![JSModuleItem] -> !JSAnnot -> JSAST
JSAstStatement :: !JSStatement -> !JSAnnot -> JSAST
JSAstExpression :: !JSExpression -> !JSAnnot -> JSAST
JSAstLiteral :: !JSExpression -> !JSAnnot -> JSAST
data JSObjectProperty

-- | name, colon, value
JSPropertyNameandValue :: !JSPropertyName -> !JSAnnot -> ![JSExpression] -> JSObjectProperty
JSPropertyIdentRef :: !JSAnnot -> !String -> JSObjectProperty
JSObjectMethod :: !JSMethodDefinition -> JSObjectProperty
data JSPropertyName
JSPropertyIdent :: !JSAnnot -> !String -> JSPropertyName
JSPropertyString :: !JSAnnot -> !String -> JSPropertyName
JSPropertyNumber :: !JSAnnot -> !String -> JSPropertyName

-- | lb, expr, rb
JSPropertyComputed :: !JSAnnot -> !JSExpression -> !JSAnnot -> JSPropertyName
type JSObjectPropertyList = JSCommaTrailingList JSObjectProperty

-- | Accessors for JSObjectProperty is either get or set.
data JSAccessor
JSAccessorGet :: !JSAnnot -> JSAccessor
JSAccessorSet :: !JSAnnot -> JSAccessor
data JSMethodDefinition
JSMethodDefinition :: !JSPropertyName -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSBlock -> JSMethodDefinition

-- | 
--   
- , name, lb, params, rb, block
--   
JSGeneratorMethodDefinition :: !JSAnnot -> !JSPropertyName -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSBlock -> JSMethodDefinition

-- | get/set, name, lb, params, rb, block
JSPropertyAccessor :: !JSAccessor -> !JSPropertyName -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSBlock -> JSMethodDefinition
data JSIdent
JSIdentName :: !JSAnnot -> !String -> JSIdent
JSIdentNone :: JSIdent
data JSVarInitializer

-- | assignop, initializer
JSVarInit :: !JSAnnot -> !JSExpression -> JSVarInitializer
JSVarInitNone :: JSVarInitializer
data JSArrayElement
JSArrayElement :: !JSExpression -> JSArrayElement
JSArrayComma :: !JSAnnot -> JSArrayElement
data JSCommaList a

-- | head, comma, a
JSLCons :: !JSCommaList a -> !JSAnnot -> !a -> JSCommaList a

-- | single element (no comma)
JSLOne :: !a -> JSCommaList a
JSLNil :: JSCommaList a
data JSCommaTrailingList a

-- | list, trailing comma
JSCTLComma :: !JSCommaList a -> !JSAnnot -> JSCommaTrailingList a

-- | list
JSCTLNone :: !JSCommaList a -> JSCommaTrailingList a
data JSArrowParameterList
JSUnparenthesizedArrowParameter :: !JSIdent -> JSArrowParameterList
JSParenthesizedArrowParameterList :: !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> JSArrowParameterList
data JSTemplatePart

-- | expr, rb, suffix
JSTemplatePart :: !JSExpression -> !JSAnnot -> !String -> JSTemplatePart
data JSClassHeritage
JSExtends :: !JSAnnot -> !JSExpression -> JSClassHeritage
JSExtendsNone :: JSClassHeritage
data JSClassElement
JSClassInstanceMethod :: !JSMethodDefinition -> JSClassElement
JSClassStaticMethod :: !JSAnnot -> !JSMethodDefinition -> JSClassElement
JSClassSemi :: !JSAnnot -> JSClassElement
data JSModuleItem

-- | import,decl
JSModuleImportDeclaration :: !JSAnnot -> !JSImportDeclaration -> JSModuleItem

-- | export,decl
JSModuleExportDeclaration :: !JSAnnot -> !JSExportDeclaration -> JSModuleItem
JSModuleStatementListItem :: !JSStatement -> JSModuleItem
data JSImportDeclaration

-- | imports, module, semi
JSImportDeclaration :: !JSImportClause -> !JSFromClause -> !JSSemi -> JSImportDeclaration

-- | module, module, semi
JSImportDeclarationBare :: !JSAnnot -> !String -> !JSSemi -> JSImportDeclaration
data JSImportClause

-- | default
JSImportClauseDefault :: !JSIdent -> JSImportClause

-- | namespace
JSImportClauseNameSpace :: !JSImportNameSpace -> JSImportClause

-- | named imports
JSImportClauseNamed :: !JSImportsNamed -> JSImportClause

-- | default, comma, namespace
JSImportClauseDefaultNameSpace :: !JSIdent -> !JSAnnot -> !JSImportNameSpace -> JSImportClause

-- | default, comma, named imports
JSImportClauseDefaultNamed :: !JSIdent -> !JSAnnot -> !JSImportsNamed -> JSImportClause
data JSFromClause

-- | from, string literal, string literal contents
JSFromClause :: !JSAnnot -> !JSAnnot -> !String -> JSFromClause

-- | Import namespace, e.g. '* as whatever'
data JSImportNameSpace

-- | 
--   
- , as, ident
--   
JSImportNameSpace :: !JSBinOp -> !JSAnnot -> !JSIdent -> JSImportNameSpace

-- | Named imports, e.g. '{ foo, bar, baz as quux }'
data JSImportsNamed

-- | lb, specifiers, rb
JSImportsNamed :: !JSAnnot -> !JSCommaList JSImportSpecifier -> !JSAnnot -> JSImportsNamed

-- | Note that this data type is separate from ExportSpecifier because the
--   grammar is slightly different (e.g. in handling of reserved words).
data JSImportSpecifier

-- | ident
JSImportSpecifier :: !JSIdent -> JSImportSpecifier

-- | ident, as, ident
JSImportSpecifierAs :: !JSIdent -> !JSAnnot -> !JSIdent -> JSImportSpecifier
data JSExportDeclaration

-- | exports, module, semi
JSExportFrom :: JSExportClause -> JSFromClause -> !JSSemi -> JSExportDeclaration

-- | exports, autosemi
JSExportLocals :: JSExportClause -> !JSSemi -> JSExportDeclaration

-- | body, autosemi | JSExportDefault
JSExport :: !JSStatement -> !JSSemi -> JSExportDeclaration
data JSExportClause

-- | lb, specifiers, rb
JSExportClause :: !JSAnnot -> !JSCommaList JSExportSpecifier -> !JSAnnot -> JSExportClause
data JSExportSpecifier

-- | ident
JSExportSpecifier :: !JSIdent -> JSExportSpecifier

-- | ident1, as, ident2
JSExportSpecifierAs :: !JSIdent -> !JSAnnot -> !JSIdent -> JSExportSpecifier
binOpEq :: JSBinOp -> JSBinOp -> Bool

-- | Show the AST elements stripped of their JSAnnot data.
showStripped :: JSAST -> String
instance GHC.Internal.Data.Data.Data Language.JavaScript.Parser.AST.JSAST
instance GHC.Internal.Data.Data.Data Language.JavaScript.Parser.AST.JSAccessor
instance GHC.Internal.Data.Data.Data Language.JavaScript.Parser.AST.JSAnnot
instance GHC.Internal.Data.Data.Data Language.JavaScript.Parser.AST.JSArrayElement
instance GHC.Internal.Data.Data.Data Language.JavaScript.Parser.AST.JSArrowParameterList
instance GHC.Internal.Data.Data.Data Language.JavaScript.Parser.AST.JSAssignOp
instance GHC.Internal.Data.Data.Data Language.JavaScript.Parser.AST.JSBinOp
instance GHC.Internal.Data.Data.Data Language.JavaScript.Parser.AST.JSBlock
instance GHC.Internal.Data.Data.Data Language.JavaScript.Parser.AST.JSClassElement
instance GHC.Internal.Data.Data.Data Language.JavaScript.Parser.AST.JSClassHeritage
instance GHC.Internal.Data.Data.Data a => GHC.Internal.Data.Data.Data (Language.JavaScript.Parser.AST.JSCommaList a)
instance GHC.Internal.Data.Data.Data a => GHC.Internal.Data.Data.Data (Language.JavaScript.Parser.AST.JSCommaTrailingList a)
instance GHC.Internal.Data.Data.Data Language.JavaScript.Parser.AST.JSExportClause
instance GHC.Internal.Data.Data.Data Language.JavaScript.Parser.AST.JSExportDeclaration
instance GHC.Internal.Data.Data.Data Language.JavaScript.Parser.AST.JSExportSpecifier
instance GHC.Internal.Data.Data.Data Language.JavaScript.Parser.AST.JSExpression
instance GHC.Internal.Data.Data.Data Language.JavaScript.Parser.AST.JSFromClause
instance GHC.Internal.Data.Data.Data Language.JavaScript.Parser.AST.JSIdent
instance GHC.Internal.Data.Data.Data Language.JavaScript.Parser.AST.JSImportClause
instance GHC.Internal.Data.Data.Data Language.JavaScript.Parser.AST.JSImportDeclaration
instance GHC.Internal.Data.Data.Data Language.JavaScript.Parser.AST.JSImportNameSpace
instance GHC.Internal.Data.Data.Data Language.JavaScript.Parser.AST.JSImportSpecifier
instance GHC.Internal.Data.Data.Data Language.JavaScript.Parser.AST.JSImportsNamed
instance GHC.Internal.Data.Data.Data Language.JavaScript.Parser.AST.JSMethodDefinition
instance GHC.Internal.Data.Data.Data Language.JavaScript.Parser.AST.JSModuleItem
instance GHC.Internal.Data.Data.Data Language.JavaScript.Parser.AST.JSObjectProperty
instance GHC.Internal.Data.Data.Data Language.JavaScript.Parser.AST.JSPropertyName
instance GHC.Internal.Data.Data.Data Language.JavaScript.Parser.AST.JSSemi
instance GHC.Internal.Data.Data.Data Language.JavaScript.Parser.AST.JSStatement
instance GHC.Internal.Data.Data.Data Language.JavaScript.Parser.AST.JSSwitchParts
instance GHC.Internal.Data.Data.Data Language.JavaScript.Parser.AST.JSTemplatePart
instance GHC.Internal.Data.Data.Data Language.JavaScript.Parser.AST.JSTryCatch
instance GHC.Internal.Data.Data.Data Language.JavaScript.Parser.AST.JSTryFinally
instance GHC.Internal.Data.Data.Data Language.JavaScript.Parser.AST.JSUnaryOp
instance GHC.Internal.Data.Data.Data Language.JavaScript.Parser.AST.JSVarInitializer
instance GHC.Classes.Eq Language.JavaScript.Parser.AST.JSAST
instance GHC.Classes.Eq Language.JavaScript.Parser.AST.JSAccessor
instance GHC.Classes.Eq Language.JavaScript.Parser.AST.JSAnnot
instance GHC.Classes.Eq Language.JavaScript.Parser.AST.JSArrayElement
instance GHC.Classes.Eq Language.JavaScript.Parser.AST.JSArrowParameterList
instance GHC.Classes.Eq Language.JavaScript.Parser.AST.JSAssignOp
instance GHC.Classes.Eq Language.JavaScript.Parser.AST.JSBinOp
instance GHC.Classes.Eq Language.JavaScript.Parser.AST.JSBlock
instance GHC.Classes.Eq Language.JavaScript.Parser.AST.JSClassElement
instance GHC.Classes.Eq Language.JavaScript.Parser.AST.JSClassHeritage
instance GHC.Classes.Eq a => GHC.Classes.Eq (Language.JavaScript.Parser.AST.JSCommaList a)
instance GHC.Classes.Eq a => GHC.Classes.Eq (Language.JavaScript.Parser.AST.JSCommaTrailingList a)
instance GHC.Classes.Eq Language.JavaScript.Parser.AST.JSExportClause
instance GHC.Classes.Eq Language.JavaScript.Parser.AST.JSExportDeclaration
instance GHC.Classes.Eq Language.JavaScript.Parser.AST.JSExportSpecifier
instance GHC.Classes.Eq Language.JavaScript.Parser.AST.JSExpression
instance GHC.Classes.Eq Language.JavaScript.Parser.AST.JSFromClause
instance GHC.Classes.Eq Language.JavaScript.Parser.AST.JSIdent
instance GHC.Classes.Eq Language.JavaScript.Parser.AST.JSImportClause
instance GHC.Classes.Eq Language.JavaScript.Parser.AST.JSImportDeclaration
instance GHC.Classes.Eq Language.JavaScript.Parser.AST.JSImportNameSpace
instance GHC.Classes.Eq Language.JavaScript.Parser.AST.JSImportSpecifier
instance GHC.Classes.Eq Language.JavaScript.Parser.AST.JSImportsNamed
instance GHC.Classes.Eq Language.JavaScript.Parser.AST.JSMethodDefinition
instance GHC.Classes.Eq Language.JavaScript.Parser.AST.JSModuleItem
instance GHC.Classes.Eq Language.JavaScript.Parser.AST.JSObjectProperty
instance GHC.Classes.Eq Language.JavaScript.Parser.AST.JSPropertyName
instance GHC.Classes.Eq Language.JavaScript.Parser.AST.JSSemi
instance GHC.Classes.Eq Language.JavaScript.Parser.AST.JSStatement
instance GHC.Classes.Eq Language.JavaScript.Parser.AST.JSSwitchParts
instance GHC.Classes.Eq Language.JavaScript.Parser.AST.JSTemplatePart
instance GHC.Classes.Eq Language.JavaScript.Parser.AST.JSTryCatch
instance GHC.Classes.Eq Language.JavaScript.Parser.AST.JSTryFinally
instance GHC.Classes.Eq Language.JavaScript.Parser.AST.JSUnaryOp
instance GHC.Classes.Eq Language.JavaScript.Parser.AST.JSVarInitializer
instance GHC.Internal.Show.Show Language.JavaScript.Parser.AST.JSAST
instance GHC.Internal.Show.Show Language.JavaScript.Parser.AST.JSAccessor
instance GHC.Internal.Show.Show Language.JavaScript.Parser.AST.JSAnnot
instance GHC.Internal.Show.Show Language.JavaScript.Parser.AST.JSArrayElement
instance GHC.Internal.Show.Show Language.JavaScript.Parser.AST.JSArrowParameterList
instance GHC.Internal.Show.Show Language.JavaScript.Parser.AST.JSAssignOp
instance GHC.Internal.Show.Show Language.JavaScript.Parser.AST.JSBinOp
instance GHC.Internal.Show.Show Language.JavaScript.Parser.AST.JSBlock
instance GHC.Internal.Show.Show Language.JavaScript.Parser.AST.JSClassElement
instance GHC.Internal.Show.Show Language.JavaScript.Parser.AST.JSClassHeritage
instance GHC.Internal.Show.Show a => GHC.Internal.Show.Show (Language.JavaScript.Parser.AST.JSCommaList a)
instance GHC.Internal.Show.Show a => GHC.Internal.Show.Show (Language.JavaScript.Parser.AST.JSCommaTrailingList a)
instance GHC.Internal.Show.Show Language.JavaScript.Parser.AST.JSExportClause
instance GHC.Internal.Show.Show Language.JavaScript.Parser.AST.JSExportDeclaration
instance GHC.Internal.Show.Show Language.JavaScript.Parser.AST.JSExportSpecifier
instance GHC.Internal.Show.Show Language.JavaScript.Parser.AST.JSExpression
instance GHC.Internal.Show.Show Language.JavaScript.Parser.AST.JSFromClause
instance GHC.Internal.Show.Show Language.JavaScript.Parser.AST.JSIdent
instance GHC.Internal.Show.Show Language.JavaScript.Parser.AST.JSImportClause
instance GHC.Internal.Show.Show Language.JavaScript.Parser.AST.JSImportDeclaration
instance GHC.Internal.Show.Show Language.JavaScript.Parser.AST.JSImportNameSpace
instance GHC.Internal.Show.Show Language.JavaScript.Parser.AST.JSImportSpecifier
instance GHC.Internal.Show.Show Language.JavaScript.Parser.AST.JSImportsNamed
instance GHC.Internal.Show.Show Language.JavaScript.Parser.AST.JSMethodDefinition
instance GHC.Internal.Show.Show Language.JavaScript.Parser.AST.JSModuleItem
instance GHC.Internal.Show.Show Language.JavaScript.Parser.AST.JSObjectProperty
instance GHC.Internal.Show.Show Language.JavaScript.Parser.AST.JSPropertyName
instance GHC.Internal.Show.Show Language.JavaScript.Parser.AST.JSSemi
instance GHC.Internal.Show.Show Language.JavaScript.Parser.AST.JSStatement
instance GHC.Internal.Show.Show Language.JavaScript.Parser.AST.JSSwitchParts
instance GHC.Internal.Show.Show Language.JavaScript.Parser.AST.JSTemplatePart
instance GHC.Internal.Show.Show Language.JavaScript.Parser.AST.JSTryCatch
instance GHC.Internal.Show.Show Language.JavaScript.Parser.AST.JSTryFinally
instance GHC.Internal.Show.Show Language.JavaScript.Parser.AST.JSUnaryOp
instance GHC.Internal.Show.Show Language.JavaScript.Parser.AST.JSVarInitializer
instance Language.JavaScript.Parser.AST.ShowStripped Language.JavaScript.Parser.AST.JSAccessor
instance Language.JavaScript.Parser.AST.ShowStripped Language.JavaScript.Parser.AST.JSArrayElement
instance Language.JavaScript.Parser.AST.ShowStripped Language.JavaScript.Parser.AST.JSArrowParameterList
instance Language.JavaScript.Parser.AST.ShowStripped Language.JavaScript.Parser.AST.JSAssignOp
instance Language.JavaScript.Parser.AST.ShowStripped Language.JavaScript.Parser.AST.JSBinOp
instance Language.JavaScript.Parser.AST.ShowStripped Language.JavaScript.Parser.AST.JSBlock
instance Language.JavaScript.Parser.AST.ShowStripped Language.JavaScript.Parser.AST.JSClassElement
instance Language.JavaScript.Parser.AST.ShowStripped Language.JavaScript.Parser.AST.JSClassHeritage
instance Language.JavaScript.Parser.AST.ShowStripped a => Language.JavaScript.Parser.AST.ShowStripped (Language.JavaScript.Parser.AST.JSCommaList a)
instance Language.JavaScript.Parser.AST.ShowStripped a => Language.JavaScript.Parser.AST.ShowStripped (Language.JavaScript.Parser.AST.JSCommaTrailingList a)
instance Language.JavaScript.Parser.AST.ShowStripped Language.JavaScript.Parser.AST.JSExportClause
instance Language.JavaScript.Parser.AST.ShowStripped Language.JavaScript.Parser.AST.JSExportDeclaration
instance Language.JavaScript.Parser.AST.ShowStripped Language.JavaScript.Parser.AST.JSExportSpecifier
instance Language.JavaScript.Parser.AST.ShowStripped Language.JavaScript.Parser.AST.JSExpression
instance Language.JavaScript.Parser.AST.ShowStripped Language.JavaScript.Parser.AST.JSFromClause
instance Language.JavaScript.Parser.AST.ShowStripped Language.JavaScript.Parser.AST.JSIdent
instance Language.JavaScript.Parser.AST.ShowStripped Language.JavaScript.Parser.AST.JSImportClause
instance Language.JavaScript.Parser.AST.ShowStripped Language.JavaScript.Parser.AST.JSImportDeclaration
instance Language.JavaScript.Parser.AST.ShowStripped Language.JavaScript.Parser.AST.JSImportNameSpace
instance Language.JavaScript.Parser.AST.ShowStripped Language.JavaScript.Parser.AST.JSImportSpecifier
instance Language.JavaScript.Parser.AST.ShowStripped Language.JavaScript.Parser.AST.JSImportsNamed
instance Language.JavaScript.Parser.AST.ShowStripped Language.JavaScript.Parser.AST.JSMethodDefinition
instance Language.JavaScript.Parser.AST.ShowStripped Language.JavaScript.Parser.AST.JSModuleItem
instance Language.JavaScript.Parser.AST.ShowStripped Language.JavaScript.Parser.AST.JSObjectProperty
instance Language.JavaScript.Parser.AST.ShowStripped Language.JavaScript.Parser.AST.JSPropertyName
instance Language.JavaScript.Parser.AST.ShowStripped Language.JavaScript.Parser.AST.JSSemi
instance Language.JavaScript.Parser.AST.ShowStripped Language.JavaScript.Parser.AST.JSStatement
instance Language.JavaScript.Parser.AST.ShowStripped Language.JavaScript.Parser.AST.JSSwitchParts
instance Language.JavaScript.Parser.AST.ShowStripped Language.JavaScript.Parser.AST.JSTemplatePart
instance Language.JavaScript.Parser.AST.ShowStripped Language.JavaScript.Parser.AST.JSTryCatch
instance Language.JavaScript.Parser.AST.ShowStripped Language.JavaScript.Parser.AST.JSTryFinally
instance Language.JavaScript.Parser.AST.ShowStripped Language.JavaScript.Parser.AST.JSUnaryOp
instance Language.JavaScript.Parser.AST.ShowStripped Language.JavaScript.Parser.AST.JSVarInitializer
instance Language.JavaScript.Parser.AST.ShowStripped a => Language.JavaScript.Parser.AST.ShowStripped [a]

module Language.JavaScript.Parser.Grammar7
parseProgram :: Alex JSAST
parseModule :: Alex JSAST
parseStatement :: Alex JSAST
parseExpression :: Alex JSAST
parseLiteral :: Alex JSAST

module Language.JavaScript.Parser.Parser

-- | Parse JavaScript Program (Script) Parse one compound statement, or a
--   sequence of simple statements. Generally used for interactive input,
--   such as from the command line of an interpreter. Return comments in
--   addition to the parsed statements.
parse :: String -> String -> Either String JSAST

-- | Parse JavaScript module
parseModule :: String -> String -> Either String JSAST
readJs :: String -> JSAST
readJsModule :: String -> JSAST

-- | Parse the given file. For UTF-8 support, make sure your locale is set
--   such that "System.IO.localeEncoding" returns "utf8"
parseFile :: FilePath -> IO JSAST

-- | Parse the given file, explicitly setting the encoding to UTF8 when
--   reading it
parseFileUtf8 :: FilePath -> IO JSAST

-- | Parse one compound statement, or a sequence of simple statements.
--   Generally used for interactive input, such as from the command line of
--   an interpreter. Return comments in addition to the parsed statements.
parseUsing :: Alex JSAST -> String -> String -> Either String JSAST
showStripped :: JSAST -> String
showStrippedMaybe :: Show a => Either a JSAST -> String

module Language.JavaScript.Pretty.Printer
renderJS :: JSAST -> Builder
renderToString :: JSAST -> String
renderToText :: JSAST -> Text
instance Language.JavaScript.Pretty.Printer.RenderJS Language.JavaScript.Parser.Token.CommentAnnotation
instance Language.JavaScript.Pretty.Printer.RenderJS Language.JavaScript.Parser.AST.JSAST
instance Language.JavaScript.Pretty.Printer.RenderJS Language.JavaScript.Parser.AST.JSAccessor
instance Language.JavaScript.Pretty.Printer.RenderJS Language.JavaScript.Parser.AST.JSAnnot
instance Language.JavaScript.Pretty.Printer.RenderJS Language.JavaScript.Parser.AST.JSArrayElement
instance Language.JavaScript.Pretty.Printer.RenderJS Language.JavaScript.Parser.AST.JSArrowParameterList
instance Language.JavaScript.Pretty.Printer.RenderJS Language.JavaScript.Parser.AST.JSAssignOp
instance Language.JavaScript.Pretty.Printer.RenderJS Language.JavaScript.Parser.AST.JSBinOp
instance Language.JavaScript.Pretty.Printer.RenderJS Language.JavaScript.Parser.AST.JSBlock
instance Language.JavaScript.Pretty.Printer.RenderJS Language.JavaScript.Parser.AST.JSClassElement
instance Language.JavaScript.Pretty.Printer.RenderJS Language.JavaScript.Parser.AST.JSClassHeritage
instance Language.JavaScript.Pretty.Printer.RenderJS a => Language.JavaScript.Pretty.Printer.RenderJS (Language.JavaScript.Parser.AST.JSCommaList a)
instance Language.JavaScript.Pretty.Printer.RenderJS a => Language.JavaScript.Pretty.Printer.RenderJS (Language.JavaScript.Parser.AST.JSCommaTrailingList a)
instance Language.JavaScript.Pretty.Printer.RenderJS Language.JavaScript.Parser.AST.JSExportClause
instance Language.JavaScript.Pretty.Printer.RenderJS Language.JavaScript.Parser.AST.JSExportDeclaration
instance Language.JavaScript.Pretty.Printer.RenderJS Language.JavaScript.Parser.AST.JSExportSpecifier
instance Language.JavaScript.Pretty.Printer.RenderJS Language.JavaScript.Parser.AST.JSExpression
instance Language.JavaScript.Pretty.Printer.RenderJS Language.JavaScript.Parser.AST.JSFromClause
instance Language.JavaScript.Pretty.Printer.RenderJS Language.JavaScript.Parser.AST.JSIdent
instance Language.JavaScript.Pretty.Printer.RenderJS Language.JavaScript.Parser.AST.JSImportClause
instance Language.JavaScript.Pretty.Printer.RenderJS Language.JavaScript.Parser.AST.JSImportDeclaration
instance Language.JavaScript.Pretty.Printer.RenderJS Language.JavaScript.Parser.AST.JSImportNameSpace
instance Language.JavaScript.Pretty.Printer.RenderJS Language.JavaScript.Parser.AST.JSImportSpecifier
instance Language.JavaScript.Pretty.Printer.RenderJS Language.JavaScript.Parser.AST.JSImportsNamed
instance Language.JavaScript.Pretty.Printer.RenderJS Language.JavaScript.Parser.AST.JSMethodDefinition
instance Language.JavaScript.Pretty.Printer.RenderJS Language.JavaScript.Parser.AST.JSModuleItem
instance Language.JavaScript.Pretty.Printer.RenderJS Language.JavaScript.Parser.AST.JSObjectProperty
instance Language.JavaScript.Pretty.Printer.RenderJS Language.JavaScript.Parser.AST.JSPropertyName
instance Language.JavaScript.Pretty.Printer.RenderJS Language.JavaScript.Parser.AST.JSSemi
instance Language.JavaScript.Pretty.Printer.RenderJS Language.JavaScript.Parser.AST.JSStatement
instance Language.JavaScript.Pretty.Printer.RenderJS Language.JavaScript.Parser.AST.JSSwitchParts
instance Language.JavaScript.Pretty.Printer.RenderJS Language.JavaScript.Parser.AST.JSTemplatePart
instance Language.JavaScript.Pretty.Printer.RenderJS Language.JavaScript.Parser.AST.JSTryCatch
instance Language.JavaScript.Pretty.Printer.RenderJS Language.JavaScript.Parser.AST.JSTryFinally
instance Language.JavaScript.Pretty.Printer.RenderJS Language.JavaScript.Parser.AST.JSUnaryOp
instance Language.JavaScript.Pretty.Printer.RenderJS Language.JavaScript.Parser.AST.JSVarInitializer
instance Language.JavaScript.Pretty.Printer.RenderJS GHC.Internal.Base.String
instance Language.JavaScript.Pretty.Printer.RenderJS [Language.JavaScript.Parser.Token.CommentAnnotation]
instance Language.JavaScript.Pretty.Printer.RenderJS [Language.JavaScript.Parser.AST.JSExpression]
instance Language.JavaScript.Pretty.Printer.RenderJS [Language.JavaScript.Parser.AST.JSTryCatch]
instance Language.JavaScript.Pretty.Printer.RenderJS [Language.JavaScript.Parser.AST.JSSwitchParts]
instance Language.JavaScript.Pretty.Printer.RenderJS [Language.JavaScript.Parser.AST.JSStatement]
instance Language.JavaScript.Pretty.Printer.RenderJS [Language.JavaScript.Parser.AST.JSModuleItem]
instance Language.JavaScript.Pretty.Printer.RenderJS [Language.JavaScript.Parser.AST.JSArrayElement]
instance Language.JavaScript.Pretty.Printer.RenderJS [Language.JavaScript.Parser.AST.JSTemplatePart]
instance Language.JavaScript.Pretty.Printer.RenderJS [Language.JavaScript.Parser.AST.JSClassElement]
instance Language.JavaScript.Pretty.Printer.RenderJS (GHC.Internal.Maybe.Maybe Language.JavaScript.Parser.AST.JSExpression)
instance Language.JavaScript.Pretty.Printer.RenderJS Language.JavaScript.Parser.SrcLocation.TokenPosn

module Language.JavaScript.Parser

-- | Parse JavaScript Program (Script) Parse one compound statement, or a
--   sequence of simple statements. Generally used for interactive input,
--   such as from the command line of an interpreter. Return comments in
--   addition to the parsed statements.
parse :: String -> String -> Either String JSAST

-- | Parse JavaScript module
parseModule :: String -> String -> Either String JSAST
readJs :: String -> JSAST
readJsModule :: String -> JSAST

-- | Parse the given file. For UTF-8 support, make sure your locale is set
--   such that "System.IO.localeEncoding" returns "utf8"
parseFile :: FilePath -> IO JSAST

-- | Parse the given file, explicitly setting the encoding to UTF8 when
--   reading it
parseFileUtf8 :: FilePath -> IO JSAST
showStripped :: JSAST -> String
showStrippedMaybe :: Show a => Either a JSAST -> String
data JSExpression

-- | Terminals
JSIdentifier :: !JSAnnot -> !String -> JSExpression
JSDecimal :: !JSAnnot -> !String -> JSExpression
JSLiteral :: !JSAnnot -> !String -> JSExpression
JSHexInteger :: !JSAnnot -> !String -> JSExpression
JSOctal :: !JSAnnot -> !String -> JSExpression
JSStringLiteral :: !JSAnnot -> !String -> JSExpression
JSRegEx :: !JSAnnot -> !String -> JSExpression

-- | Non Terminals
JSArrayLiteral :: !JSAnnot -> ![JSArrayElement] -> !JSAnnot -> JSExpression

-- | lhs, assignop, rhs
JSAssignExpression :: !JSExpression -> !JSAssignOp -> !JSExpression -> JSExpression

-- | await, expr
JSAwaitExpression :: !JSAnnot -> !JSExpression -> JSExpression

-- | expr, bl, args, rb
JSCallExpression :: !JSExpression -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> JSExpression

-- | expr, dot, expr
JSCallExpressionDot :: !JSExpression -> !JSAnnot -> !JSExpression -> JSExpression

-- | expr, [, expr, ]
JSCallExpressionSquare :: !JSExpression -> !JSAnnot -> !JSExpression -> !JSAnnot -> JSExpression

-- | class, optional identifier, optional extends clause, lb, body, rb
JSClassExpression :: !JSAnnot -> !JSIdent -> !JSClassHeritage -> !JSAnnot -> ![JSClassElement] -> !JSAnnot -> JSExpression

-- | expression components
JSCommaExpression :: !JSExpression -> !JSAnnot -> !JSExpression -> JSExpression

-- | lhs, op, rhs
JSExpressionBinary :: !JSExpression -> !JSBinOp -> !JSExpression -> JSExpression

-- | lb,expression,rb
JSExpressionParen :: !JSAnnot -> !JSExpression -> !JSAnnot -> JSExpression

-- | expression, operator
JSExpressionPostfix :: !JSExpression -> !JSUnaryOp -> JSExpression

-- | cond, ?, trueval, :, falseval
JSExpressionTernary :: !JSExpression -> !JSAnnot -> !JSExpression -> !JSAnnot -> !JSExpression -> JSExpression

-- | parameter list,arrow,block`
JSArrowExpression :: !JSArrowParameterList -> !JSAnnot -> !JSStatement -> JSExpression

-- | fn,name,lb, parameter list,rb,block`
JSFunctionExpression :: !JSAnnot -> !JSIdent -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSBlock -> JSExpression

-- | fn,*,name,lb, parameter list,rb,block`
JSGeneratorExpression :: !JSAnnot -> !JSAnnot -> !JSIdent -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSBlock -> JSExpression

-- | firstpart, dot, name
JSMemberDot :: !JSExpression -> !JSAnnot -> !JSExpression -> JSExpression
JSMemberExpression :: !JSExpression -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> JSExpression

-- | new, name, lb, args, rb
JSMemberNew :: !JSAnnot -> !JSExpression -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> JSExpression

-- | firstpart, lb, expr, rb
JSMemberSquare :: !JSExpression -> !JSAnnot -> !JSExpression -> !JSAnnot -> JSExpression

-- | new, expr
JSNewExpression :: !JSAnnot -> !JSExpression -> JSExpression

-- | lbrace contents rbrace
JSObjectLiteral :: !JSAnnot -> !JSObjectPropertyList -> !JSAnnot -> JSExpression
JSSpreadExpression :: !JSAnnot -> !JSExpression -> JSExpression

-- | optional tag, lquot, head, parts
JSTemplateLiteral :: !Maybe JSExpression -> !JSAnnot -> !String -> ![JSTemplatePart] -> JSExpression
JSUnaryExpression :: !JSUnaryOp -> !JSExpression -> JSExpression

-- | identifier, initializer
JSVarInitExpression :: !JSExpression -> !JSVarInitializer -> JSExpression

-- | yield, optional expr
JSYieldExpression :: !JSAnnot -> !Maybe JSExpression -> JSExpression

-- | yield, *, expr
JSYieldFromExpression :: !JSAnnot -> !JSAnnot -> !JSExpression -> JSExpression
data JSAnnot

-- | Annotation: position and comment/whitespace information
JSAnnot :: !TokenPosn -> ![CommentAnnotation] -> JSAnnot

-- | A single space character
JSAnnotSpace :: JSAnnot

-- | No annotation
JSNoAnnot :: JSAnnot
data JSBinOp
JSBinOpAnd :: !JSAnnot -> JSBinOp
JSBinOpBitAnd :: !JSAnnot -> JSBinOp
JSBinOpBitOr :: !JSAnnot -> JSBinOp
JSBinOpBitXor :: !JSAnnot -> JSBinOp
JSBinOpDivide :: !JSAnnot -> JSBinOp
JSBinOpEq :: !JSAnnot -> JSBinOp
JSBinOpGe :: !JSAnnot -> JSBinOp
JSBinOpGt :: !JSAnnot -> JSBinOp
JSBinOpIn :: !JSAnnot -> JSBinOp
JSBinOpInstanceOf :: !JSAnnot -> JSBinOp
JSBinOpLe :: !JSAnnot -> JSBinOp
JSBinOpLsh :: !JSAnnot -> JSBinOp
JSBinOpLt :: !JSAnnot -> JSBinOp
JSBinOpMinus :: !JSAnnot -> JSBinOp
JSBinOpMod :: !JSAnnot -> JSBinOp
JSBinOpNeq :: !JSAnnot -> JSBinOp
JSBinOpOf :: !JSAnnot -> JSBinOp
JSBinOpOr :: !JSAnnot -> JSBinOp
JSBinOpPlus :: !JSAnnot -> JSBinOp
JSBinOpRsh :: !JSAnnot -> JSBinOp
JSBinOpStrictEq :: !JSAnnot -> JSBinOp
JSBinOpStrictNeq :: !JSAnnot -> JSBinOp
JSBinOpTimes :: !JSAnnot -> JSBinOp
JSBinOpUrsh :: !JSAnnot -> JSBinOp
data JSBlock

-- | lbrace, stmts, rbrace
JSBlock :: !JSAnnot -> ![JSStatement] -> !JSAnnot -> JSBlock
data JSUnaryOp
JSUnaryOpDecr :: !JSAnnot -> JSUnaryOp
JSUnaryOpDelete :: !JSAnnot -> JSUnaryOp
JSUnaryOpIncr :: !JSAnnot -> JSUnaryOp
JSUnaryOpMinus :: !JSAnnot -> JSUnaryOp
JSUnaryOpNot :: !JSAnnot -> JSUnaryOp
JSUnaryOpPlus :: !JSAnnot -> JSUnaryOp
JSUnaryOpTilde :: !JSAnnot -> JSUnaryOp
JSUnaryOpTypeof :: !JSAnnot -> JSUnaryOp
JSUnaryOpVoid :: !JSAnnot -> JSUnaryOp
data JSSemi
JSSemi :: !JSAnnot -> JSSemi
JSSemiAuto :: JSSemi
data JSAssignOp
JSAssign :: !JSAnnot -> JSAssignOp
JSTimesAssign :: !JSAnnot -> JSAssignOp
JSDivideAssign :: !JSAnnot -> JSAssignOp
JSModAssign :: !JSAnnot -> JSAssignOp
JSPlusAssign :: !JSAnnot -> JSAssignOp
JSMinusAssign :: !JSAnnot -> JSAssignOp
JSLshAssign :: !JSAnnot -> JSAssignOp
JSRshAssign :: !JSAnnot -> JSAssignOp
JSUrshAssign :: !JSAnnot -> JSAssignOp
JSBwAndAssign :: !JSAnnot -> JSAssignOp
JSBwXorAssign :: !JSAnnot -> JSAssignOp
JSBwOrAssign :: !JSAnnot -> JSAssignOp
data JSTryCatch

-- | catch,lb,ident,rb,block
JSCatch :: !JSAnnot -> !JSAnnot -> !JSExpression -> !JSAnnot -> !JSBlock -> JSTryCatch

-- | catch,lb,ident,if,expr,rb,block
JSCatchIf :: !JSAnnot -> !JSAnnot -> !JSExpression -> !JSAnnot -> !JSExpression -> !JSAnnot -> !JSBlock -> JSTryCatch
data JSTryFinally

-- | finally,block
JSFinally :: !JSAnnot -> !JSBlock -> JSTryFinally
JSNoFinally :: JSTryFinally
data JSStatement

-- | lbrace, stmts, rbrace, autosemi
JSStatementBlock :: !JSAnnot -> ![JSStatement] -> !JSAnnot -> !JSSemi -> JSStatement

-- | break,optional identifier, autosemi
JSBreak :: !JSAnnot -> !JSIdent -> !JSSemi -> JSStatement

-- | const, decl, autosemi
JSLet :: !JSAnnot -> !JSCommaList JSExpression -> !JSSemi -> JSStatement

-- | class, name, optional extends clause, lb, body, rb, autosemi
JSClass :: !JSAnnot -> !JSIdent -> !JSClassHeritage -> !JSAnnot -> ![JSClassElement] -> !JSAnnot -> !JSSemi -> JSStatement

-- | const, decl, autosemi
JSConstant :: !JSAnnot -> !JSCommaList JSExpression -> !JSSemi -> JSStatement

-- | continue, optional identifier,autosemi
JSContinue :: !JSAnnot -> !JSIdent -> !JSSemi -> JSStatement

-- | do,stmt,while,lb,expr,rb,autosemi
JSDoWhile :: !JSAnnot -> !JSStatement -> !JSAnnot -> !JSAnnot -> !JSExpression -> !JSAnnot -> !JSSemi -> JSStatement

-- | for,lb,expr,semi,expr,semi,expr,rb.stmt
JSFor :: !JSAnnot -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSStatement -> JSStatement

-- | for,lb,expr,in,expr,rb,stmt
JSForIn :: !JSAnnot -> !JSAnnot -> !JSExpression -> !JSBinOp -> !JSExpression -> !JSAnnot -> !JSStatement -> JSStatement

-- | for,lb,var,vardecl,semi,expr,semi,expr,rb,stmt
JSForVar :: !JSAnnot -> !JSAnnot -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSStatement -> JSStatement

-- | for,lb,var,vardecl,in,expr,rb,stmt
JSForVarIn :: !JSAnnot -> !JSAnnot -> !JSAnnot -> !JSExpression -> !JSBinOp -> !JSExpression -> !JSAnnot -> !JSStatement -> JSStatement

-- | for,lb,var,vardecl,semi,expr,semi,expr,rb,stmt
JSForLet :: !JSAnnot -> !JSAnnot -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSStatement -> JSStatement

-- | for,lb,var,vardecl,in,expr,rb,stmt
JSForLetIn :: !JSAnnot -> !JSAnnot -> !JSAnnot -> !JSExpression -> !JSBinOp -> !JSExpression -> !JSAnnot -> !JSStatement -> JSStatement

-- | for,lb,var,vardecl,in,expr,rb,stmt
JSForLetOf :: !JSAnnot -> !JSAnnot -> !JSAnnot -> !JSExpression -> !JSBinOp -> !JSExpression -> !JSAnnot -> !JSStatement -> JSStatement

-- | for,lb,var,vardecl,semi,expr,semi,expr,rb,stmt
JSForConst :: !JSAnnot -> !JSAnnot -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSStatement -> JSStatement

-- | for,lb,var,vardecl,in,expr,rb,stmt
JSForConstIn :: !JSAnnot -> !JSAnnot -> !JSAnnot -> !JSExpression -> !JSBinOp -> !JSExpression -> !JSAnnot -> !JSStatement -> JSStatement

-- | for,lb,var,vardecl,in,expr,rb,stmt
JSForConstOf :: !JSAnnot -> !JSAnnot -> !JSAnnot -> !JSExpression -> !JSBinOp -> !JSExpression -> !JSAnnot -> !JSStatement -> JSStatement

-- | for,lb,expr,in,expr,rb,stmt
JSForOf :: !JSAnnot -> !JSAnnot -> !JSExpression -> !JSBinOp -> !JSExpression -> !JSAnnot -> !JSStatement -> JSStatement

-- | for,lb,var,vardecl,in,expr,rb,stmt
JSForVarOf :: !JSAnnot -> !JSAnnot -> !JSAnnot -> !JSExpression -> !JSBinOp -> !JSExpression -> !JSAnnot -> !JSStatement -> JSStatement

-- | fn,name, lb,parameter list,rb,block,autosemi
JSAsyncFunction :: !JSAnnot -> !JSAnnot -> !JSIdent -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSBlock -> !JSSemi -> JSStatement

-- | fn,name, lb,parameter list,rb,block,autosemi
JSFunction :: !JSAnnot -> !JSIdent -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSBlock -> !JSSemi -> JSStatement

-- | fn,*,name, lb,parameter list,rb,block,autosemi
JSGenerator :: !JSAnnot -> !JSAnnot -> !JSIdent -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSBlock -> !JSSemi -> JSStatement

-- | if,(,expr,),stmt
JSIf :: !JSAnnot -> !JSAnnot -> !JSExpression -> !JSAnnot -> !JSStatement -> JSStatement

-- | if,(,expr,),stmt,else,rest
JSIfElse :: !JSAnnot -> !JSAnnot -> !JSExpression -> !JSAnnot -> !JSStatement -> !JSAnnot -> !JSStatement -> JSStatement

-- | identifier,colon,stmt
JSLabelled :: !JSIdent -> !JSAnnot -> !JSStatement -> JSStatement
JSEmptyStatement :: !JSAnnot -> JSStatement
JSExpressionStatement :: !JSExpression -> !JSSemi -> JSStatement

-- | lhs, assignop, rhs, autosemi
JSAssignStatement :: !JSExpression -> !JSAssignOp -> !JSExpression -> !JSSemi -> JSStatement
JSMethodCall :: !JSExpression -> !JSAnnot -> !JSCommaList JSExpression -> !JSAnnot -> !JSSemi -> JSStatement

-- | optional expression,autosemi
JSReturn :: !JSAnnot -> !Maybe JSExpression -> !JSSemi -> JSStatement

-- | switch,lb,expr,rb,caseblock,autosemi
JSSwitch :: !JSAnnot -> !JSAnnot -> !JSExpression -> !JSAnnot -> !JSAnnot -> ![JSSwitchParts] -> !JSAnnot -> !JSSemi -> JSStatement

-- | throw val autosemi
JSThrow :: !JSAnnot -> !JSExpression -> !JSSemi -> JSStatement

-- | try,block,catches,finally
JSTry :: !JSAnnot -> !JSBlock -> ![JSTryCatch] -> !JSTryFinally -> JSStatement

-- | var, decl, autosemi
JSVariable :: !JSAnnot -> !JSCommaList JSExpression -> !JSSemi -> JSStatement

-- | while,lb,expr,rb,stmt
JSWhile :: !JSAnnot -> !JSAnnot -> !JSExpression -> !JSAnnot -> !JSStatement -> JSStatement

-- | with,lb,expr,rb,stmt list
JSWith :: !JSAnnot -> !JSAnnot -> !JSExpression -> !JSAnnot -> !JSStatement -> !JSSemi -> JSStatement
data JSSwitchParts

-- | expr,colon,stmtlist
JSCase :: !JSAnnot -> !JSExpression -> !JSAnnot -> ![JSStatement] -> JSSwitchParts

-- | colon,stmtlist
JSDefault :: !JSAnnot -> !JSAnnot -> ![JSStatement] -> JSSwitchParts
data JSAST

-- | source elements, trailing whitespace
JSAstProgram :: ![JSStatement] -> !JSAnnot -> JSAST
JSAstModule :: ![JSModuleItem] -> !JSAnnot -> JSAST
JSAstStatement :: !JSStatement -> !JSAnnot -> JSAST
JSAstExpression :: !JSExpression -> !JSAnnot -> JSAST
JSAstLiteral :: !JSExpression -> !JSAnnot -> JSAST
data CommentAnnotation
CommentA :: TokenPosn -> String -> CommentAnnotation
WhiteSpace :: TokenPosn -> String -> CommentAnnotation
NoComment :: CommentAnnotation

-- | TokenPosn records the location of a token in the input text.
--   It has three fields: the address (number of characters preceding the
--   token), line number and column of a token within the file. Note: The
--   lexer assumes the usual eight character tab stops.
data TokenPosn
TokenPn :: !Int -> !Int -> !Int -> TokenPosn
tokenPosnEmpty :: TokenPosn
renderJS :: JSAST -> Builder
renderToString :: JSAST -> String
renderToText :: JSAST -> Text

module Language.JavaScript.Process.Minify
minifyJS :: JSAST -> JSAST
instance Language.JavaScript.Process.Minify.MinifyJS Language.JavaScript.Parser.AST.JSAccessor
instance Language.JavaScript.Process.Minify.MinifyJS Language.JavaScript.Parser.AST.JSArrayElement
instance Language.JavaScript.Process.Minify.MinifyJS Language.JavaScript.Parser.AST.JSArrowParameterList
instance Language.JavaScript.Process.Minify.MinifyJS Language.JavaScript.Parser.AST.JSAssignOp
instance Language.JavaScript.Process.Minify.MinifyJS Language.JavaScript.Parser.AST.JSBinOp
instance Language.JavaScript.Process.Minify.MinifyJS Language.JavaScript.Parser.AST.JSBlock
instance Language.JavaScript.Process.Minify.MinifyJS Language.JavaScript.Parser.AST.JSClassHeritage
instance Language.JavaScript.Process.Minify.MinifyJS a => Language.JavaScript.Process.Minify.MinifyJS (Language.JavaScript.Parser.AST.JSCommaList a)
instance Language.JavaScript.Process.Minify.MinifyJS a => Language.JavaScript.Process.Minify.MinifyJS (Language.JavaScript.Parser.AST.JSCommaTrailingList a)
instance Language.JavaScript.Process.Minify.MinifyJS Language.JavaScript.Parser.AST.JSExportClause
instance Language.JavaScript.Process.Minify.MinifyJS Language.JavaScript.Parser.AST.JSExportDeclaration
instance Language.JavaScript.Process.Minify.MinifyJS Language.JavaScript.Parser.AST.JSExportSpecifier
instance Language.JavaScript.Process.Minify.MinifyJS Language.JavaScript.Parser.AST.JSExpression
instance Language.JavaScript.Process.Minify.MinifyJS Language.JavaScript.Parser.AST.JSFromClause
instance Language.JavaScript.Process.Minify.MinifyJS Language.JavaScript.Parser.AST.JSIdent
instance Language.JavaScript.Process.Minify.MinifyJS Language.JavaScript.Parser.AST.JSImportClause
instance Language.JavaScript.Process.Minify.MinifyJS Language.JavaScript.Parser.AST.JSImportDeclaration
instance Language.JavaScript.Process.Minify.MinifyJS Language.JavaScript.Parser.AST.JSImportNameSpace
instance Language.JavaScript.Process.Minify.MinifyJS Language.JavaScript.Parser.AST.JSImportSpecifier
instance Language.JavaScript.Process.Minify.MinifyJS Language.JavaScript.Parser.AST.JSImportsNamed
instance Language.JavaScript.Process.Minify.MinifyJS Language.JavaScript.Parser.AST.JSMethodDefinition
instance Language.JavaScript.Process.Minify.MinifyJS Language.JavaScript.Parser.AST.JSModuleItem
instance Language.JavaScript.Process.Minify.MinifyJS Language.JavaScript.Parser.AST.JSObjectProperty
instance Language.JavaScript.Process.Minify.MinifyJS Language.JavaScript.Parser.AST.JSPropertyName
instance Language.JavaScript.Process.Minify.MinifyJS Language.JavaScript.Parser.AST.JSTemplatePart
instance Language.JavaScript.Process.Minify.MinifyJS Language.JavaScript.Parser.AST.JSTryCatch
instance Language.JavaScript.Process.Minify.MinifyJS Language.JavaScript.Parser.AST.JSTryFinally
instance Language.JavaScript.Process.Minify.MinifyJS Language.JavaScript.Parser.AST.JSUnaryOp
instance Language.JavaScript.Process.Minify.MinifyJS Language.JavaScript.Parser.AST.JSVarInitializer
instance Language.JavaScript.Process.Minify.MinifyJS [Language.JavaScript.Parser.AST.JSClassElement]
instance Language.JavaScript.Process.Minify.MinifyJS (GHC.Internal.Maybe.Maybe Language.JavaScript.Parser.AST.JSExpression)
