W      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~       Safe-InferredRead all stuff from a process.   Safe-Inferred  Safe-InferredNone .=Convert a Haskell value to a value representing a Fay value. /=Convert a value representing a Fay value to a Haskell value. Parse a data type or record. )Parse a data constructor from an object. 0Make a simple ADT constructor from an object: { slot1: 1, slot2: 2} -> Foo 1 2 "Make a record from a key-value: { x: 1 } -> Foo { x = 1 } Parse a double. Parse an int. Parse a number. Parse a bool. Parse a string. Parse an array. !Parse a nullable value to Maybe. ./././ ./  Safe-Inferred  None0BThese are the data types that are serializable directly to native E JS data types. Strings, floating points and arrays. The others are: 7 actions in the JS monad, which are thunks that shouldn' t be forced > when serialized but wrapped up as JS zero-arg functions, and  unknown types can'.t be converted but should at least be forced. 1 Unknown. =Literal value type. CA name of some kind. MExpression type. fStatement type. q&The JavaScript FFI interfacing monad. r Error type. Print some value. 2Just a convenience class to generalize the parsing/ printing of  various types of syntax. Compile monad. A name'+s scope, either imported or bound locally. State of the compiler. Configuration of the compiler. The default compiler state. !The built-in operations that aren't actually compiled from & anywhere, they come from runtime.js. They'?re in the names list so that they can be overriden by the user % in e.g. let a * b = a - b in 1 * 2. ASo we resolve them to Fay$, i.e. the prefix used for the runtime E support. $ is not allowed in Haskell module names, so there will be < no conflicts if a user decicdes to use a module named Fay. ?So e.g. will compile to (*) Fay$$mult, which is in runtime.js. /Helpful for writing qualified symbols (Fay.*). Helpful for some things. Helpful for some things. Default configuration. 0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ƗfponmlkjihgMedcba`_^]\[ZYXWVUTSRQPON=BA@?>CLKJIHGFEDr~}|{zyxwvutsq0<;:9876543210 <;:987654321=BA@?>C LKJIHGFEDMedcba`_^]\[ZYXWVUTSRQPONf ponmlkjihgqr~}|{zyxwvuts NoneAThis is a hack for names generated in the Haskell AST. Should be  removed once it's no longer needed. %Encode a Haskell name to JavaScript. 4Normalize the given name to JavaScript-valid names. "Print the given printer indented. Output a newline. ?Write out a string, updating the current position information. Intercalate monadic action. Concatenate two printables. !Print one of the kinds of names. Print an expression. Print a single statement. Print a list of statements. $Print (and properly encode) a name. 0Print special constructors (tuples, list, etc.) Print module name. 4Print (and properly encode to JS) a qualified name. 5Print literals. These need some special encoding for 6 JS-format literals. Could use the Text.JSON library.  None )Contains allowed foreign function types. Declare a foreign action. Maybes are pretty common. Functions are foreignable. JS values are foreignable. Tuples ! arrays are OK. Lists ! arrays are OK. Bools are OK. Characters are OK. Some numbers in JS are int. All numbers in JS are double.  Unit is OK. The foreign value. Bottom. qqNoneAppend two lists. G9Evaluate each action in the sequence from left to right,  and collect the results.  sequence :: [Fay a] -> Fay [a]       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^None_`abc  !"#$%&'()*+,-q      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcq  $ '"! (_`&%-,)#+*abcLMF)&(J\ !8U=?WZ $%"#6CNIP 53RQ927A*@+>'D 4],^;<B:STE./01GH[X -OVYK _`abcNone dState. hOptimize monad. i@The arity of a function. Arity here is defined to be the number C of arguments that can be directly uncurried from a curried lambda  abstraction. So x y z -> if x then (a -> a) else (a -> a) has an  arity of 3, not 4. j:Run an optimizer, which may output additional statements. k@Perform any top-level cross-module optimizations and GO DEEP to  optimize further. l Perform tail-call optimization. m7Strip redundant forcing from the whole generated code. n9Strip redundant forcing from an application if possible. o=Apply the given function to the top-level expressions in the  given statements. p=Apply the given function to the top-level expressions in the  given statement. q:Collect functions and their arity from the whole codeset. r Get the arity of an expression. u0Rename an uncurried copy of a curried function. defghijklmnopqrstudefghijklmnopqrstuihdefgjklmnopqrstudefghijklmnopqrstuNonev Extra the string from an ident. w0Make an identifier from the built-in HJ module. xWrap an expression in a thunk. yWrap an expression in a thunk. zGenerate unique names. {?Resolve a given maybe-qualified name to a fully qualifed name. |Do have have a simple import X import on our hands? }'Qualify a name for the current module. ~Make a top-level binding. ECreate a temporary scope and discard it after the given computation. 3Run a compiler and just get the scope information. &Bind a variable in the current scope. Emit exported names.  Force an expression in a thunk. )Is a JS expression a literal (constant)? !Extract the string from a qname.  qname :: QName -> String " qname (UnQual (Ident str)) = str 0 qname (UnQual (Symbol sym)) = jsEncodeName sym  qname i = error $ *qname: Expected unqualified ident, found:  ++ show i -- FIXME: 8Deconstruct a parse result (a la maybe, foldr, either). Get a config option. FOptimize pattern matching conditions by merging conditions in common. Throw a JS exception. )Throw a JS exception (in an expression). Is an alt a wildcard? Is a pattern a wildcard? =Generate a temporary, SCOPED name for testing conditions and  such. =Generate a temporary, SCOPED name for testing conditions and  such. We don'2t have name tracking yet, so instead we use this. vwxyz{|}~vwxyz{|}~vwxyz{|}~vwxyz{|}~None Compile an FFI call. "Get arg types of a function type. :Convert a Haskell type to an internal FFI representation. Extract the type. Expand a type application. Generate a user-defined type. Translate: JS ! Fay. Translate: Fay ! JS. :Get a JS-representation of a fundamental type for encoding/ decoding. Get the arity of a type. 7Format the FFI format string with the given arguments. #Location of the original FFI decl. Name of the to-be binding. The format string. Type signature. The format string.  Arguments.  The JS code. None9Run the compiler. ?Compile a Haskell source string to a JavaScript source string. ?Compile a Haskell source string to a JavaScript source string. Parse some Fay code. The parse mode for Fay. ;Compile the given input and print the output out prettily. ?Compile a String of Fay and print it as beautified JavaScript. :Compile the given Fay code for the documentation. This is * specialised because the documentation isn't really real   compilation. "Compile the top-level Fay module. BCollect record definitions and store record name and field names. / A ConDecl will have fields named slot1..slotN Compile Haskell module. Compile the given import. AAdd the new scopes to the old one, stripping out local bindings. Add Don't re-import the same modules. Compile Haskell declaration. Compile a declaration. "Compile a top-level pattern bind.  )Compile a normal simple pattern binding.  Compile a data declaration.  DCompile a function which pattern matches (causing a case analysis).  &Compile a right-hand-side expression.  Compile guards Compile Haskell expression. Compile simple application. Compile a negate application 7Compile an infix application, optimizing the JS cases. Compile a list expression. Compile an if. Compile a lambda. Desugar list comprehensions. "Desugar left sections to lambdas. "Desugar left sections to lambdas. Compile case expressions. Compile a do block. #Compile a statement of a do block. 8Compile the given pattern against the given expression. 8Compile the given pattern against the given expression. #Compile a pattern variable e.g. x.  Compile a record field pattern. .Compile a literal value from a pattern match. $Compile as binding in pattern match  0Compile a record construction with named fields H | GHC will warn on uninitialized fields, they will be undefined in JS. !Compile a pattern application. "Compile a pattern list. #1Compile an infix pattern (e.g. cons and tuples.) $Compile a guarded alt. %Compile a let expression. &Compile let declaration. 'Compile Haskell literal. (BMaximum number of elements to allow in strict list representation  of arithmetic sequences. ) Compile [e1..] arithmetic sequences. *Compile [e1..e3] arithmetic sequences. +Optimize short literal [e1..e3] arithmetic sequences. ,Compile [e1,e2..] arithmetic sequences. -Compile [e1,e2..e3] arithmetic sequences. .!Optimize short literal [e1,e2..e3] arithmetic sequences. H/0123456 7    89 :!"#$%&'()*+,-.;<=  H/0123456 7    89 :!"#$%&'()*+,-.;<= NoneBCompile the given file and write the output to the given path, or  if nothing given, stdout. HCompile the given file and write to the output, also generate any HTML. Compile the given file. >/Compile the given module to a runnable module. ?!Print an this.x = x; export out. -Convert a Haskell filename to a JS filename. -Print a compile error for human consumption. >?0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~>?@ !"#$%$&$'$()*+,$-$./0/123456789:;<=>?@ABC/DEF"GHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~]cWW      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyzz{|}~y                           !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOP Q RS fay-0.10.1.0Language.Fay.PreludeLanguage.Fay.ConvertLanguage.Fay.TypesLanguage.Fay.FFILanguage.Fay.Compiler.OptimizerLanguage.Fay.Compiler.MiscLanguage.Fay.Compiler.FFILanguage.Fay.Compiler Language.FaySystem.Process.ExtraData.List.ExtraControl.Monad.IO Paths_fayLanguage.Fay.PrintLanguage.Fay.Stdlibghc-primGHC.PrimseqbaseGHC.Num- GHC.Classes==>=EqGHC.BaseMonad Data.DataDataGHC.ReadReadGHC.ShowShowData.Typeable.InternalTypeable GHC.TypesBoolCharDoubleInt integer-gmpGHC.Integer.TypeIntegerStringFalseTrue Data.MaybeNothingMaybe Text.ReadreadgmapMogmapMpgmapMgmapQigmapQgmapQrgmapQlgmapT dataCast2 dataCast1 dataTypeOftoConstrgunfoldgfoldlGHC.Real/Just*+typeOf/=<=&&||<> showToFay readFromFayFundamentalType UnknownTypeBoolTypeIntType DoubleType StringTypeDateTypeDefined UserDefined TupleTypeListTypeJsType FunctionTypeJsLitJsBool JsFloatingJsIntJsStrJsCharJsName JsBuiltIn JsConstructorJsTmpJsParamJsApplyJsForceJsThunkJsThis JsNameVarJsExp JsUndefinedJsObjJsInfixJsNeqJsEqJsIndex JsInstanceOf JsThrowExpJsNewJsListJsUpdatePropExternJsGetPropExtern JsUpdatePropJsLookup JsGetPropJsParenJsNull JsTernaryIfJsNegAppJsAppJsFunJsRawExpJsStmtJsBlock JsContinue JsSetPropJsUpdateJsWhileJsThrow JsEarlyReturnJsIf JsMappedVarJsVarFay CompileErrorUnableResolveQualifiedUnableResolveUnqualifiedFfiFormatInvalidJavaScriptFfiFormatIncompleteArgFfiFormatNoSuchArgFfiFormatBadCharsFfiNeedsTypeSigCouldn'tFindImportRecursiveDoUnsupportedInvalidDoBlockLetUnsupportedUnsupportedModuleSyntax EmptyDoBlockUnsupportedQualStmtUnsupportedImportUnsupportedGuardedAltsUnsupportedRhsUnsupportedFieldPatternUnsupportedPatternUnsupportedOperatorUnsupportedLetBindingUnsupportedLiteralUnsupportedExpressionUnsupportedWhereInMatchUnsupportedMatchSyntaxUnsupportedExportSpecUnsupportedDeclaration ParseError PrintableprintJSPrinter runPrinter PrintStatepsPrettypsLinepsColumn psMapping psIndentLevelpsOutput psNewlineMapping mappingName mappingFrom mappingTo CompilesTo compileToCompile unCompile NameScope ScopeBindingScopeImportedAs ScopeImported CompileState stateConfig stateExportsstateExportAllstateModuleName stateFilePath stateRecords stateFayToJs stateJsToFay stateImportedstateNameDepth stateScope CompileConfigconfigOptimizeconfigFlattenAppsconfigExportBuiltinsconfigDirectoryIncludesconfigPrettyPrintconfigHtmlWrapperconfigHtmlJSLibs configLibrary configWarnconfigFilePathconfigTypecheck configWalldefaultCompileStateForeignffiOrderingEQLTGTEitherRightLeft Undefinederror undefinedshoweither fromInteger fromRationalnegateabssignumpiexpsqrtlog**^^^logBasesintancosasinatanacossinhtanhcoshasinhatanhacoshproperFractiontruncateroundceilingfloorsubtractevenoddgcdlcmcurryuncurrysndfstfindfilternotnullmapnubelemnotElemsortcomparesortByinsertBywhensuccpredenumFrom enumFromTo enumFromThenenumFromThenTozipWithzipWith3zipzip3unzipunzip3linesunlineswordsunwordsflipmaybe.++$concat concatMapfoldrfoldr1foldlfoldl1andoranyallmaximumminimumproductsumscanlscanl1scanrscanr1lookup intersperse prependToAll intercalateforM_mapM_constlengthremquotquotRemdivmoddivModminmaxrecip fromIntegral otherwisereverse=<<sequence sequence_idasTypeOfuntil$!!!headtailinitlastiteraterepeat replicatecycletakedropsplitAt takeWhile dropWhilespanbreakprintputStrLn>>>>=failreturnforceOptStateoptStmts optUncurryOptimize FuncArity runOptimizeroptimizeTopleveltcostripAndUncurrywalkAndStripForcesapplyToExpsInStmtsapplyToExpsInStmt collectFuncsexpAritytestuncurryBindingrenameUncurriedunname fayBuiltinthunk stmtsThunk uniqueNames resolveName simpleImportqualify bindToplevel withScope generateScopebindVar emitExport isConstant parseResultconfigoptimizePatConditionsthrowthrowExp isWildCardAlt isWildCardPatwithScopedTmpJsNamewithScopedTmpName compileFFI emitFayToJsfayToJsDispatcherjsToFayDispatcher emitJsToFay runCompile compileViaStr compileToAst printCompileprintTestCompilecompileForDocscompileToplevelModule compileModule compileDecl compileExp compileFromTocompileFromToAndGenerateHtml compileFiletoJsNameshowCompileErrorreadAllFromProcessreadAllFromProcess'unionOfforio parseData parseObject makeSimple makeRecord parseDoubleparseInt parseNumber parseBool parseString parseArray parseMaybecatchIOversionbindirlibdirdatadir libexecdir getBinDir getLibDir getDataDir getLibexecDirgetDataFileNameprimOps$fIsStringModuleName$fIsStringQName$fIsStringName$fDefaultCompileConfig$fErrorCompileError$fDefaultPrintState encodeName normalizeNameindentednewlinewrite intercalateM+>$fPrintableJsName$fPrintableJsExp$fPrintableJsStmt$fPrintable[]0$fPrintableName$fPrintableSpecialCon$fPrintableModuleName$fPrintableQName$fPrintableJsLit printJSString printJSPretty reservedWords$fPrintablePrinter $fPrintable[]$fForeignMaybe $fForeign(->) $fForeignFay $fForeign(,) $fForeign[] $fForeignBool $fForeignChar $fForeignInt$fForeignDouble $fForeign()$fForeign(,,,,,,)$fForeign(,,,,,)$fForeign(,,,,)$fForeign(,,,) $fForeign(,,)concerror' unsafePownub' enumFromBy enumFromByTolength'rem'quot'$fForeignDefinedfunctionTypeArgsargTypebangType expandApp userDefinedjsToFayfayToJstypeRep typeArity formatFFItranscodingObjtranscodingObjForced explodeFieldsparseFay parseModeinitialPass_dataDecl compileImport mergeScopesaddExportsToScopeunlessImported compileDeclscompilePatBindcompileUnguardedRhscompileDataDeclcompileFunCase compileRhs compileGuards compileApp compileNegAppcompileInfixApp compileList compileIf compileLambdadesugarListCompdesugarLeftSectiondesugarRightSection compileCasecompileDoBlock compileStmt compilePatAlt compilePat compilePVarcompilePatFields compilePLit compilePAsPatcompileRecConstr compilePApp compilePListcompileInfixPatcompileGuardedAlt compileLetcompileLetDecl compileLitmaxStrictASLencompileEnumFromcompileEnumFromTo optEnumFromTocompileEnumFromThencompileEnumFromThenTooptEnumFromThenTo initialPassinitialPass_importinitialPass_recordsinitialPass_decl typechecktranslateModuleNamewarn findImport convertGADT compileVarmakeList updateRec$fCompilesToExpJsExp$fCompilesToDecl[]$fCompilesToModule[]compileToModule printExport