úÎþxŽ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒNone3KÈ$Bound variable names and their types0Variable names may appear more than once in the . The Var x@n refers to the nth occurrence of x in the  (using 0-based numbering).(An empty context with no key-value pairs toList empty = []Add a key-value pair to the Lookup a key by name and index ilookup k 0 (insert k v0 ctx ) = Just v0 lookup k 1 (insert k v0 (insert k v1 ctx)) = Just v1+Return all key-value associations as a listŽNone 1345KQV<ô-A structured type error that includes context The specific type errorSyntax tree for expressions Const c ~ c )Var (V x 0) ~ x Var (V x n) ~ x@n Lam x A b ~ »(x : A) !’ b =Pi x A B ~ "(x : A) !’ B Pi unused A B ~ A !’ B App f a ~ f a Embed path ~ #pathLike , except with an 0 instance in order to avoid orphan instancesPath to an external resource +Constants for the calculus of constructionsThe only axiom is: "¦ * : %¡&... and all four rule pairs are valid: /"¦ * ! * : * "¦ %¡ ! * : * "¦ * ! %¡ : %¡ "¦ %¡ ! %¡ : %¡#Label for a bound variableThe ‘% field is the variable's name (i.e. "x").The ’ÿ! field disambiguates variables with the same name if there are multiple bound variables of the same name in scope. Zero refers to the nearest bound variable and the index increases by one for each bound variable of the same name going outward. The following diagram may help: ÿ@ +-refers to-+ | | v | \(x : *) -> \(y : *) -> \(x : *) -> x@0 +-------------refers to-------------+ | | v | \(x : *) -> \(y : *) -> \(x : *) -> x@1This ’_ behaves like a De Bruijn index in the special case where all variables have the same name.+You can optionally omit the index if it is 0: — +refers to+ | | v | \(x : *) -> \(y : *) -> \(x : *) -> x.Zero indices are omitted when pretty-printing #6s and non-zero indices appear as a numeric suffix.% Pretty-print an expression as a “, using Unicode symbols& Pretty-print an expression as a “, using ASCII symbols';Substitute all occurrences of a variable with an expression subst x n C B ~ B[x@n := C]( shift n x adds n* to the index of all free variables named x within an )yType-check an expression and return the expression's type if type-checking suceeds or an error if type-checking fails)¶ does not necessarily normalize the type since full normalization is not necessary for just type-checking. If you actually care about the returned type then you may want to + it afterwards.** is the same as )‡ with an empty context, meaning that the expression must be closed (i.e. no free variables), otherwise type-checking will fail.”-Reduce an expression to weak-head normal form•3Returns whether a variable is free in an expression+]Reduce an expression to its normal form, performing both beta reduction and eta reduction+ does not type-check the expression. You may want to type-check expressions before normalizing them since normalization can convert an ill-typed expression into a well-typed expression.,Pretty-print a value:-Generates a syntactically valid Morte program'   "!#$%&'()*+,'#$ !")*+(',%&    !"#$NoneDC³U<Token type, used to communicate between the lexer and parserdA U augmented with h informationh+The cursor's location while lexing the textlFConvert a text representation of an expression into a stream of tokenslT keeps track of position and returns the remainder of the input if lexing fails.U`c\Y[Zab^VWX]_defghijkllUVWXYZ[\]^_`abchijkdefg–—˜™š›œžŸ ¡¢£¤UVWXYZ[\]^_`abcdefg¥¦§¨©hijkNone1LI2q"Structured type for parsing errorsuThe specific parsing errorv2Lexing failed, returning the remainder of the textwCParsing failed, returning the invalid token and the expected tokensx Parse an  from ‘ or return a q if parsing failsqrstuvwxxqrstuvwqrstuvwNone1w, }6Extend another exception with the current import stack)Imports resolved so far, in reverse order€The nested exceptionÐMorte tries to ensure that all expressions hosted on network endpoints are weakly referentially transparent, meaning roughly that any two clients will compile the exact same result given the same URL.ÿïTo be precise, a strong interpretaton of referential transparency means that if you compiled a URL you could replace the expression hosted at that URL with the compiled result. Let's term this "static linking". Morte (very intentionally) does not satisfy this stronger interpretation of referential transparency since "statically linking" an expression (i.e. permanently resolving all imports) means that the expression will no longer update if its dependencies change.ÿ`In general, either interpretation of referential transparency is not enforceable in a networked context since one can easily violate referential transparency with a custom DNS, but Morte can still try to guard against common unintentional violations. To do this, Morte enforces that a non-local import may not reference a local import.Local imports are defined as:A fileA URL with a host of  localhost or  127.0.0.1-All other imports are defined to be non-localƒThe offending opaque import„7An import failed because of a cycle in the import graph†The offending cyclic importªaThis function computes the current path by taking the last absolute path (either an absolute « or 8) and combining it with all following relative pathsFor example, if the file  `./foo/bar` imports `./baz`, that will resolve to  `./foo/baz`a. Relative imports are relative to a file's parent directory. This also works for URLs, too.™This code is full of all sorts of edge cases so it wouldn't surprise me at all if you find something broken in here. Most of the ugliness is due to:Handling paths ending with /@ by stripping the /@J suffix if and only if you navigate to any downstream relative pathsRemoving spurious .s and ..s from the pathAlso, there are way too many ¬xs in the URL-handling cod For now I don't mind, but if were to really do this correctly we'd store the URLs as ‘G for O(1) access to the end of the string. The only reason we use ­$ at all is for consistency with the  http-client library.® Remove all .'s and ..'s in the path¯Load a : as a "dynamic" expression (without resolving any imports)YThis also returns the true final path (i.e. explicit "/@" at the end for directories)°Load a 5 as a "static" expression (with all imports resolved)‡(Resolve all imports within an expressionšBy default the starting path is the current directory, but you can override the starting path with a file if you read in the expression from that file‡ Starting pathExpression to resolve }~€‚ƒ„…†‡ ‡„…†‚ƒ}~€±²³´µ}~€‚ƒ„…†Nonewü¶      !""#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^'(_`ab%&cddefghijklmnoppfqrstuvwxyzz{|}}~€‚ƒ„…†‡ ˆ‰Š‹ŒŽ‘Œ’“”•–—–˜™š™›œžŸ ¡¢££¤¥¦§¨©ª«¬­«®¯°±²³³´µ¶·#morte-1.6.14-5c7bmNNXKpbI91yD1JgSQW Morte.Context Morte.Core Morte.Lexer Morte.Parser Morte.Import Data.VoidVoidMorte.TutorialContextemptyinsertlookuptoList$fFunctorContext$fNFDataContext TypeErrorcontextcurrent typeMessage TypeMessageUnboundVariableInvalidInputTypeInvalidOutputType NotAFunction TypeMismatchUntypedExprConstVarLamPiAppEmbedXabsurdPathFileURLStarBoxV buildExprbuildExprASCIIsubstshifttypeWithtypeOf normalizepretty$fBuildableVar $fNFDataVar $fIsStringVar $fBinaryVar$fBuildableConst $fNFDataConst $fBinaryConst$fBuildablePath $fBinaryX $fBuildableX $fNFDataX$fShowX$fEqX$fBuildableExpr $fNFDataExpr$fIsStringExpr $fBinaryExpr$fEqExpr $fMonadExpr$fApplicativeExpr$fBuildableTypeMessage$fNFDataTypeMessage$fBuildableTypeError$fNFDataTypeError$fExceptionTypeError$fShowTypeError$fEqVar $fShowVar $fEqConst $fShowConst$fBoundedConst $fEnumConst$fEqPath $fOrdPath $fShowPath $fFunctorExpr$fFoldableExpr$fTraversableExpr $fShowExpr$fShowTypeMessageToken OpenParen CloseParenColonAtArrowLambdaLabelNumberEOF LocatedTokentokenpositionPositionPlineNocolumnNolexExpr$fShowPosition $fEqToken $fShowToken$fShowLocatedToken ParseError parseMessage ParseMessageLexingParsing exprFromText$fBuildableParseError$fExceptionParseError$fShowParseError$fShowParseMessageImported importStacknestedReferentiallyOpaque opaqueImportCycle cyclicImportload $fShowCycle$fExceptionCycle$fShowReferentiallyOpaque$fExceptionReferentiallyOpaque$fShowImported$fExceptionImported getContextdeepseq-1.4.3.0Control.DeepSeqNFData#text-1.2.2.2-EakMpasry3jA6OIwSZhq9MData.Text.Internal.LazyTextghc-prim GHC.TypesIntData.Text.Internal.BuilderBuilderwhnffreeInAlexAcc AlexAccNone AlexAccSkip AlexLastAccAlexNone AlexLastSkip AlexReturnAlexEOF AlexErrorAlexSkip AlexTokenAlexAddrAlexA# AlexInputprevChar currBytes currInput canonicalize,system-filepath-0.4.14-JFMwAOJLZbosQTaZ0Q2MmFilesystem.Path.InternalFilePathbaseGHC.ListreverseGHC.BaseStringclean loadDynamic loadStaticStatus_stack_cache_manager