0)      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ experimentalYJoel Bjornson joel.bjornson@gmail.com Niklas Broberg nibro@cs.chalmers.seArray representation Class for JBool expressions Class for JFloat expressions Class for JInt expressions Class for JString expressions $Class for representing expressions. M First parameter is the expression, second a TBool for variable or constant. & Third parameter represents the type. ?Class for derefable data types, used to allow the creation of D dereferencing objects. Examples: Math.random() or document.write() BClass for binding objects with constructors. E.g. o = new Date(); 9Args represents types that can be passed as arguments to  JavaScript functions. KJFormal params represents parameters passed to a function along with their  corresponding types. 2Class for parameter types to JavaScript functions  !"#$%&'()*Binary Operator +,-./012345678!Class for expression that may be plussed.  Examples: 1 + 2, ha + skell. 9Assign Operator :;<=>?@A%Post or Pre prefix , i.e. --x or x++ BCD>Allows values to be compared to JNull. E.g. for checking that - an object is instantiated or is accessible. E%Class that represents showable types FG"Class for representing JavaScript features, e.g. names of ( objects or functions. Example: window  hasFeature alert HIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstJavaScript types uvwxyz{|}Generates a Block from a Stmt. ~Get the value of a variable. <escape a Haskell String so that it is suitable for use as a  javascript string literal. #Instanses for tuples,triples etc.. IAll JString values along with all objects and all functions can be null. #Any string value can be a feature.  Show for Exp   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~tOkjihgfedcba`_^]\[ZYXWVUTSRQPlmsrqpon)('&%$#"!  9@?>=<;:*76543210/.-,+8ACBDGEFNMLKJIH  ~}uvwxyz{|   )('&%$#"!  !"#$%&'()* 76543210/.-,++,-./0123456789@?>=<;::;<=>?@ACBBCDEFFGHIJKLMNOkjihgfedcba`_^]\[ZYXWVUTSRQPPQRSTUVWXYZ[\]^_`abcdefghijklmsrqponnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPFQRSTUVWXYZ[\]^_`abcdefgNMLOhijklmnopqrstuvwxyz{|}~HJavaScript-0.4.7Language.HJavaScript.SyntaxArrayIsJBooltoJBoolIsJFloattoJFloatIsJInttoJInt IsJString toJStringIsExptoExpIsDerefHasConstructorIsClass VarsToExpsv2eArgs FormalParams mkFParams showsFParams ParamTypeBlockSequence EmptyBlockElsesNoElseElseElseifStmtIfReturnContinueBreakForInForDoWhileWhileExpStmt VarAssign VarDeclAssignVarDeclBinOpLEThanGEThanLThanGThan NotEqualsEqualsOrAndModDivTimesMinusPlus PlusOpTypeAssignOpOrAssign AndAssign ModAssign DivAssign TimesAssign MinusAssign PlusAssignPostPrePrePst IsNullableJShowjshow IsFeatureJArrayJObjectJVoidJFloatJBoolJStringJIntExpJIsImplJValueOf JCastObjectJNullJBlockJThis JFunctionJDerefJDeleteJNewJCallJIfOp JDecrement JIncrementJBinOpJNotJNeg JAssignWithJAssignJConstJSndJFstJRecRecVar JPropertyVar JArrayIndex JDerefVarJMemberJParamJVarJTypederefderefVar propertyVarcall methodCallvoidMethodCallmethodCallNoArgsvoidMethodCallNoArgstoBlockval renderBlock showsArgs showsFeatureindentppBlockppVarppExpppStmtppElsesjEscape $fParamType()$fIsNullable[] $fIsFeature[] $fShowExp