C *      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ Safe-Inferred2Get all files in a folder and its subdirectories.  Taken from Real World Haskell  http:book.realworldhaskell.orgread:io-case-study-a-library-for-searching-the-filesystem.html   Safe-Inferred4Read from a process returning both std err and out.  None&Convert a GADT to a normal data type.   Safe-Inferred"Get the union of a list of lists.  Flip of map.   Safe-InferredWord version of flip (>>=). When the value is Just. Wrap up a form in a Maybe. Flip of mapMaybe. Monadic version of maybe. *Do any of the (monadic) predicates match? None=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 or tuple. Parse a tuple. )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 a char. Parse a Text. Parse an array.  Parse unit.   Safe-Inferred4Alias of liftIO, I hate typing it. Hate reading it.  Safe-Inferred/Extract the module name from a qualified name. Extract the name from a QName. )Change or add the ModuleName of a QName.  Extract the string from a Name. None3Maps names bound in the module to their real names 2 The keys are unqualified for locals and imports, ' the values are always fully qualified  Example contents:  [ (UnQUal main , Qual Main main)  , (UnQual take , Qual Prelude take)  , ( Qual M  insertWith, Qual Data.Map  insertWith) ] &Find the path of a locally bound name  Returns special values in the Fay$ module for primOps *Bind a list of names into the local scope - Right now all bindings are made unqualified  NFind all names that are bound locally in this module, which excludes imports.  !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.  ;Lookup a primop that was resolved to a Prelude definition.  2Get module level names from a haskell module AST.               Safe-Inferred  NoneO.The serialization context indicates whether we' re currently E serializing some value or a particular field in a user-defined data  type. BThese 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. Literal value type. A name of some kind. 'Expression type. DStatement type. T&The JavaScript FFI interfacing monad. U Error type. pPrint some value. rThe printer monad. u!The state of the pretty printer. wAre we to pretty print? xThe current line. yCurrent column. zSource mappings. {Current indentation level. |/The current output. TODO: Make more efficient. }Just outputted a newline? ~A source mapping. The name of the mapping. The original source location. The new source location. 2Just a convenience class to generalize the parsing/ printing of  various types of syntax. Compile monad. Run the compiler. ,Configuration and globals for the compiler. The compilation configuration. $Things written out by the compiler. Constructors. Fay to JS dispatchers. JS to Fay dispatchers. State of the compiler. Collects exports from modules Map types to constructors Map constructors to fields 4Newtype constructor, destructor, wrapped type tuple 8Map of all imported modules and their source locations. $Depth of the current lexical scope. $Names in the current lexical scope. Names in the module scope. -Name of the module currently being compiled. <The name of a module split into a list for code generation. Configuration of the compiler. Run optimizations Flatten function application? Export built-in functions? Export the runtime? Export the stdlib? Export only the stdlib? 6Possibly a fay package name, and a include directory. Pretty print the JS output? .Output a HTML file including the produced JS. %Any JS files to link to in the HTML. Don'"t invoke main in the produced JS. 4Warn on dubious stuff, not related to typechecking. File path to output to. Typecheck with GHC. Typecheck with -Wall. 'Run Google Closure on the produced JS. )The package config e.g. packages-6.12.3. Included Fay packages. $Custom source location for fay-base 5Construct the complete ModulePath from a ModuleName. 7Construct intermediate module paths from a ModuleName.  mkModulePaths A.B => [[A], [A,B]] KConverting a QName to a ModulePath is only relevant for constructors since & they can conflict with module names. !The data-files source directory. ?Add a ModulePath to CompileState, meaning it has been printed. Has this ModulePath been added/ printed? Adds a new export to  for the module specified by  . (Get all exports for the current module. DGet exports from the current module originating from other modules. 9Get all exports from the current module except newtypes. :Get all of the exported identifiers for the given module.  /Helpful for writing qualified symbols (Fay.*). !Helpful for some things. "Helpful for some things. #Just handy to have. $Default state. %Simple concatenating instance.   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRST&UVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~' !"#($%  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~DSRQPONMLKJIHGFE'CBA@?>=<;:9876543210/.-,+*)(&%$#"! Uonmlkjihgfedcba`_^]\[ZYXWVpqT uvwxyz{|}rst~%  &%$#"! 'CBA@?>=<;:9876543210/.-,+*)(DSRQPONMLKJIHGFET&Uonmlkjihgfedcba`_^]\[ZYXWVpqrstuvwxyz{|}~ ' !"#($%None')The CPP's parsing state. *0Make an identifier from the built-in HJ module. +Wrap an expression in a thunk. ,Wrap an expression in a thunk. -Generate unique names. .?Resolve a given maybe-qualified name to a fully qualifed name. /?Resolve a given maybe-qualified name to a fully qualifed name. . Use this when a resolution failure is a bug. 0Resolve a newtype constructor. 1Resolve a newtype destructor. 2'Qualify a name for the current module. 37Qualify a QName for the current module if unqualified. 4Make a top-level binding. 5KCreate a temporary environment and discard it after the given computation. 6ECreate a temporary scope and discard it after the given computation. 73Run a compiler and just get the scope information. 8&Bind a variable in the current scope. 9Emit exported names. : Force an expression in a thunk. ;)Is a JS expression a literal (constant)? <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). AIs an alt a wildcard? BIs a pattern a wildcard? C5Return formatter string if expression is a FFI call. D=Generate a temporary, SCOPED name for testing conditions and  such. E=Generate a temporary, SCOPED name for testing conditions and  such. We don'2t have name tracking yet, so instead we use this. FPrint out a compiler warning. G Pretty print a source location. H)Lookup the record for a given type name. I!Get the fields for a given type. J>Get the flag used for GHC, this differs between GHC-7.6.0 and > GHC-everything-else so we need to specially test for that. It's  lame, but that'$s random flag name changes for you. KFind an import'.s filepath and contents from its module name. Run the compiler. Parse some Fay code. LLApply incredibly simplistic CPP handling. It only recognizes the following:   #if FAY  #ifdef FAY  #ifndef FAY  #else  #endif INote that this implementation replaces all removed lines with blanks, so $ that line numbers remain accurate. MThe parse mode for Fay. *)NOP*+,-./0123456789:;<=>?@ABCDEFGHIJKLM*)NOP*+,-./0123456789:;<=>?@ABCDEFGHIJKLM')PON*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNone9Get all include directories without the package mapping. ;Get all include directories not included through packages. ;Add a mapping from (maybe) a package to a source directory !Add several include directories. <Add several include directories without package references. Add a package to compilation $Add several packages to compilation QDefault configuration. QQNoneRFPreprocess and collect all information needed during code generation. SDon't re-import the same modules. TFind newtype declarations UAdd new types to the state V%Add record declarations to the state W%Is this name imported from anywhere? XCCompile an import filtering the exports based on the current module' s imports RYZSTUVWXR RYZSTUVWXNone[State. \Optimize monad. ]@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. ^:Run an optimizer, which may output additional statements. _'Inline x >> y to x;y in the JS output. `Flatten a a>>(b>>c) to [a,b,c]. a!Try to collect nested a>>(b>>c). b@Perform any top-level cross-module optimizations and GO DEEP to  optimize further. c Perform tail-call optimization. d7Strip redundant forcing from the whole generated code. e9Strip redundant forcing from an application if possible. f=Apply the given function to the top-level expressions in the  given statements. g=Apply the given function to the top-level expressions in the  given statement. h:Collect functions and their arity from the whole codeset. i Get the arity of an expression. j(Change foo(x)(y) to foo$uncurried(x,y). k0Rename an uncurried copy of a curried function. [lmn\]^_`abcdefghijk[lmn\]^_`abcdefghijk[lmn\]^_`abcdefghijkNoneo(Call out to GHC to type-check the file. oooNoneThe opposite of Ptr,. Serialize the specified polymorphic type.  foo :: Automatic a -> String >Do not serialize the specified type. This is useful for, e.g.   foo :: String -> String  foo = ffi "%1" AThis would normally serialize and unserialize the string, for no  reason, in this case. Instead:  ! foo :: Ptr String -> Ptr String %Will just give an identity function. Values that may be undefined 9 Defined x encodes to x, Undefined decodes to undefined. B An undefined property in a record will be removed when encoding. Values that may be null 1 Nullable x decodes to x, Null decodes to null. Declare a foreign action. The foreign value. Bottom. T TNone p8Compile the given pattern against the given expression. q#Compile a pattern variable e.g. x. r Compile a record field pattern. s.Compile a literal value from a pattern match. t$Compile as binding in pattern match u&Compile a pattern match on a newtype. vCompile a pattern application. wCompile a pattern list. x1Compile an infix pattern (e.g. cons and tuples.) pqrstuvwx pqrstuvwx pqrstuvwxNoneyPrint the JS to a flat string. z!Print the JS to a pretty string. {Unqualify a JsName. |(Print a constructor name given a QName. }=Print a constructor name given a Name. Helper for printCons. ~7Words reserved in haskell as well are not needed here: , case, class, do, else, if, import, in, let AThis 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. A printer is a printable. Just write out strings. !Print one of the kinds of names. Print an expression. Print a module path. 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. yz{|}~ yz{|}~yz{|}~NoneCompile an FFI call. LCompile an FFI expression (also used when compiling top level definitions). MWarn about uses of naked x.y which will not play nicely with Google Closure. Make a Fay!JS encoder. A name used for transcoding. @The name used for the forced version of a transcoding variable. "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. Make a translator. :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. /Generate n name-typ pairs from the given list. Generate Fay!JS encoding. Generate JS!Fay decoding. Make a JS!Fay decoder. MThe argument types used in serialization of parametrized user-defined types. AGet the index of a name from the set of type variables bindings. /Extract the name from a possibly-kinded tyvar. #Location of the original FFI decl. Name of the to-be binding. The format string. Type signature. #Location of the original FFI decl. The format string.  Arguments.  The JS code. None Compile Haskell expression. Compile variable. Compile Haskell literal. Compile simple application. Helper for compileApp. Compile a negate application 7Compile an infix application, optimizing the JS cases. Compile a let expression. Compile let declaration. Compile a list expression. Compile an if. Compile case expressions. 8Compile the given pattern against the given expression. Compile a guarded alt. Compile guards Compile a do block. Compile a lambda. "Desugar left sections to lambdas. "Desugar left sections to lambdas.  Compile [e1..] arithmetic sequences. Compile [e1..e3] arithmetic sequences. Compile [e1,e2..] arithmetic sequences. Compile [e1,e2..e3] arithmetic sequences. 0Compile a record construction with named fields H | GHC will warn on uninitialized fields, they will be undefined in JS. Compile a record update. Desugar list comprehensions. Make a Fay list. #Compile a statement of a do block. Optimize short literal [e1..e3] arithmetic sequences. !Optimize short literal [e1,e2..e3] arithmetic sequences. BMaximum number of elements to allow in strict list representation  of arithmetic sequences. Compiling instance.  NoneCompile Haskell declaration. Compile a declaration. "Compile a top-level pattern bind. )Compile a normal simple pattern binding. GCompile a data declaration (or a GADT, latter is converted to former). DCompile a function which pattern matches (causing a case analysis). &Compile a right-hand-side expression. Convenient instance. None?Given a configuration, resolve any packages specified to their 7 data file directories for importing the *.hs sources. Resolve package. @Does a directory exist and does it contain any Haskell sources? Describe the given package. 6Get the package version from the package description. "Make a share directory generator. None#The default compiler reader value. The default compiler state. None ?Compile a Haskell source string to a JavaScript source string. ?Compile a Haskell source string to a JavaScript source string. "Compile the top-level Fay module. Read a file and compile. Compile a source string. 6Lookup a module from include directories and compile. .Compile given the location and source string. Compile a parse HSE module. For a module A.B, generate  | var A = {};  | A.B = {}; [Generate exports for non local names, local exports have already been added to the module. 2Is the module a standard module, i.e., one that we' d rather not  output code for if we're compiling separate files. Compile the given import.  None?Compile a String of Fay and print it as beautified JavaScript. ?Compile a Haskell source string to a JavaScript source string. .Print a useful debug output of a compilation. ;Compile the given input and print the output out prettily. 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 a file returning the state. /Compile the given module to a runnable module. -Convert a Haskell filename to a JS filename. -Print a compile error for human consumption. Get the JS runtime source.   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ1[\]7^_`abcdefghijklmnopqrstuvwxyz{|}~#++**       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstduvwxyz{|}~b fay-0.16.0.1 Fay.Convert Fay.Types Fay.CompilerFay.Compiler.ConfigFay.FFIFay.Compiler.DebugFaySystem.Directory.ExtraSystem.Process.ExtraFay.Compiler.GADTData.List.ExtraControl.Monad.ExtraControl.Monad.IOFay.Compiler.QNameFay.Compiler.ModuleScope Paths_fayFay.Compiler.MiscFay.Compiler.InitialPassFay.Compiler.OptimizerFay.Compiler.TypecheckFay.Compiler.PatternFay.Compiler.PrintFay.Compiler.FFIFay.Compiler.ExpFay.Compiler.DeclFay.Compiler.PackagesFay.Compiler.Defaults showToFay readFromFaySerializeContextSerializeUserArgSerializeAnywhereFundamentalType UnknownType AutomaticPtrTypeBoolTypeIntType DoubleType StringTypeDateTypeNullableDefined UserDefined TupleTypeListTypeJsType FunctionTypeJsLitJsBool JsFloatingJsIntJsStrJsCharJsName JsModuleName JsBuiltIn JsConstructorJsTmpJsParamJsApplyJsForceJsThunkJsParametrizedTypeJsThis JsNameVarJsExpJsOrJsAnd JsUndefinedJsLitObjJsObjJsInfixJsNeqJsEqJsIndex JsInstanceOf JsThrowExpJsNewJsListJsUpdatePropExternJsGetPropExtern JsUpdatePropJsLookup JsGetPropJsParenJsNull JsTernaryIfJsNegAppJsAppJsFunJsSeqJsRawExpJsStmt JsExpStmtJsBlock JsContinueJsSetPropExternJsSetConstructor JsSetModule JsSetQName JsSetPropJsUpdateJsWhileJsThrow JsEarlyReturnJsIf JsMappedVarJsVar CompileErrorGHCErrorUnableResolveQualifiedFfiFormatInvalidJavaScriptFfiFormatIncompleteArgFfiFormatNoSuchArgFfiFormatBadCharsFfiNeedsTypeSigCouldn'tFindImportInvalidDoBlock EmptyDoBlockUnsupportedWhereInMatchUnsupportedWhereInAltUnsupportedRhsUnsupportedRecursiveDoUnsupportedQualStmtUnsupportedPatternUnsupportedModuleSyntaxUnsupportedLiteralUnsupportedLetBindingUnsupportedLetUnsupportedImportUnsupportedFieldPatternUnsupportedExpressionUnsupportedExportSpecUnsupportedDeclaration ParseError PrintableprintJSPrinter runPrinter PrintStatepsPrettypsLinepsColumn psMapping psIndentLevelpsOutput psNewlineMapping mappingName mappingFrom mappingTo CompilesTo compileToCompile unCompile CompileReader readerConfigreaderCompileLitreaderCompileDecls CompileWriter writerCons writerFayToJs writerJsToFay CompileState _stateExportsstateRecordTypes stateRecords stateNewtypes stateImportedstateNameDepthstateLocalScopestateModuleScopestateModuleScopesstateModuleNamestateJsModulePaths ModulePath unModulePath CompileConfigconfigOptimizeconfigFlattenAppsconfigExportBuiltinsconfigExportRuntimeconfigExportStdlibconfigExportStdlibOnlyconfigDirectoryIncludesconfigPrettyPrintconfigHtmlWrapperconfigHtmlJSLibs configLibrary configWarnconfigFilePathconfigTypecheck configWallconfigGClosureconfigPackageConfconfigPackagesconfigBasePath mkModulePath mkModulePathsmkModulePathFromQName faySourceDir addModulePathaddedModulePathaddCurrentExportgetCurrentExportsgetNonLocalExports getCurrentExportsWithoutNewtypes getExportsFor runCompileparseFayconfigDirectoryIncludePaths%nonPackageConfigDirectoryIncludePathsaddConfigDirectoryIncludeaddConfigDirectoryIncludesaddConfigDirectoryIncludePathsaddConfigPackageaddConfigPackagesPtr UndefinedNullffi compileExp compileDecl compileViaStr compileToAstcompileToplevelModulecompileModuleFromFilecompileModuleFromContentscompileModuleFromName compileModulecompileModuleFromASTprintTestCompilecompileTestAstdebug printCompile compileFromTocompileFromToAndGenerateHtml compileFilecompileFileWithStatetoJsNameshowCompileError getRuntimegetRecursiveContentsreadAllFromProcess convertGADTunionOfforbindwhenJustjustforMaybemaybeManyMparseDataOrTuple parseTuple parseObject makeSimple makeRecord parseDoubleparseInt parseNumber parseBool parseString parseChar parseText parseArray parseUnitioqModNameunQual changeModuleunname ModuleScope resolveName bindAsLocals moduleLocals envPrimOpsMap findPrimOpfindTopLevelNames ModuleScopeStbindNamed_decl d_classDecl d_qualCon$fDefaultModuleScope$fMonoidModuleScopecatchIOversionbindirlibdirdatadir libexecdir getBinDir getLibDir getDataDir getLibexecDirgetDataFileName$fIsStringModuleName$fIsStringQName$fIsStringName$fIsStringJsLit$fDefaultPrintState$fMonoidCompileWriter$fErrorCompileErrorCPPState fayBuiltinthunk stmtsThunk uniqueNamestryResolveNameunsafeResolveNamelookupNewtypeConstlookupNewtypeDestqualify qualifyQName bindToplevelwithModuleScope withScope generateScopebindVar emitExportforce isConstant parseResultconfigoptimizePatConditionsthrowthrowExp isWildCardAlt isWildCardPatffiExpwithScopedTmpJsNamewithScopedTmpNamewarn printSrcLoc typeToRecs typeToFieldsgetGhcPackageDbFlag findImportapplyCPP parseModeCPPElseCPPIfNoCPP$fDefaultCompileConfig initialPassunlessImportedscanNewtypeDeclscompileNewtypeDeclscanRecordDeclsimportedcompileImportWithFilter compileImport compileWithOptStateOptimize FuncArity runOptimizer inlineMonadflattencollectoptimizeTopleveltcostripAndUncurrywalkAndStripForcesapplyToExpsInStmtsapplyToExpsInStmt collectFuncsexpArityuncurryBindingrenameUncurriedoptStmts optUncurry typecheck compilePat compilePVarcompilePatFields compilePLit compilePAsPatcompileNewtypePat compilePApp compilePListcompileInfixPat printJSString printJSPrettyident printCons printConsName reservedWords encodeName normalizeNameindentednewlinewrite intercalateM+>$fPrintablePrinter $fPrintable[]$fPrintableJsName$fPrintableJsExp$fPrintableModulePath$fPrintableJsStmt$fPrintable[]0$fPrintableName$fPrintableSpecialCon$fPrintableModuleName$fPrintableQName$fPrintableJsLit compileFFI compileFFIExp warnDotUses emitFayToJstranscodingObjtranscodingObjForcedfunctionTypeArgsargTypebangType expandApp userDefinedjsToFayfayToJs translatetypeRep typeArity formatFFI explodeFields fayToJsHash jsToFayHash emitJsToFayargTypesgetIndextyvar compileVar compileLit compileApp compileApp' compileNegAppcompileInfixApp compileLetcompileLetDecl compileList compileIf compileCase compilePatAltcompileGuardedAlt compileGuardscompileDoBlock compileLambdadesugarLeftSectiondesugarRightSectioncompileEnumFromcompileEnumFromTocompileEnumFromThencompileEnumFromThenTocompileRecConstrcompileRecUpdatedesugarListCompmakeList compileStmt optEnumFromTooptEnumFromThenTomaxStrictASLen$fCompilesToExpJsExp compileDeclscompilePatBindcompileUnguardedRhscompileDataDeclcompileFunCase compileRhs$fCompilesToDecl[]resolvePackagesresolvePackagedoesSourceDirExistdescribePackagepackageVersion getShareGendefaultCompileReaderdefaultCompileStatecreateModulePathgenerateExportsanStdlibModule$fCompilesToModule[]compileToModule